舆情大数据分析-python爬取微博数据

说明

分析 微博移动端网页,网页内容较单一,便于分析 JSON 数据

  1. 将浏览器调成 移动端模式
  2. 访问 https://m.weibo.cn/

python 代码

from time import sleep
import requests
import json
import datetime

filename = "一汽红旗"

url="https://m.weibo.cn/api/container/getIndex?containerid=100103type=1&q=一汽红旗&page_type=searchall&page="

headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
    'cookie':'SUB=_2A25PUxdZDeRhGeBJ61cR9y7NyjmIHXVsv7kRrDV6PUJbkdANLWKjkW1NRna4VEYq3MfdL-ujJSyPVGsiYQZrKuVj; _T_WM=89621521152; WEIBOCN_FROM=1110006030; MLOGIN=1; XSRF-TOKEN=592e45; M_WEIBOCN_PARAMS=luicode%3D10000011%26lfid%3D100103type%253D1%2526q%253D%25E4%25B8%2580%25E6%25B1%25BD%25E7%25BA%25A2%25E6%2597%2597%26fid%3D100103type%253D1%2526q%253D%25E4%25B8%2580%25E6%25B1%25BD%25E7%25BA%25A2%25E6%2597%2597%26uicode%3D10000011'
    }


def send(page,f):
    urlTemp = url + str(page)
    print("urlTemp",urlTemp)
    #发送get请求
    resp=requests.get(urlTemp,headers=headers)
    #响应内容
    # print(resp.text)

    ok = resp.json().get("ok")
    if ok == 0:
        return
    # 由于返回的字符串中,汉字显示成 \uxxx,所以需要转换
    jsonStr = json.dumps(resp.json(),ensure_ascii=False) #转成字符串
    f.write(jsonStr)
    f.write("\n")

    cards = resp.json().get("data").get("cards")

    for card in cards:
        cardType = card.get("card_type")
        if cardType == 9 :
            lineTemp = json.dumps(card,ensure_ascii=False)

            f.write(lineTemp)
            f.write("\n")

        elif cardType == 11:
            cardGroup = card.get("card_group")

            for card in cardGroup:
                cardType = card.get("card_type")
                if cardType == 9 :
                    lineTemp = json.dumps(card,ensure_ascii=False)

                    f.write(lineTemp)
                    f.write("\n")


def exe():


    datetimeStr = datetime.datetime.today().strftime('%Y%m%d_%H%M')
    f=open(filename+"_"+datetimeStr+'.txt','w',encoding="utf-8")
    page = 1

    for item in range(1,1000):
        send(page,f)
        page += 1
        sleep(3)
        if item%10 == 0:

            f.flush()

    f.close()

exe()

原文出处:/show_1IX3CUnH2eqg.html