python 爬取微博評論數據研究與學習

聲明:

        最近在學習爬蟲的相關學習,爲了記錄下自己平時的學習內容,這個代碼只作爲學習研究使用。

        爬取微博評論數據,這裏網上有很多爬取的方法,我們主要爬取的是 m.weibo.cn 這個站點上的數據。

        這裏我們是將每條評論數據進行寫入文件,我們寫入文件的分隔爲“:::”, 格式爲:評論數據:::用戶id:::用戶名  的形式

        注意,這裏需要用戶提供需要爬取微博的id號碼,這裏默認爲:“4514293905404071”, 同時number設置我們要爬取的數量,還有一個問題就是設置間隔時間,這個可以在程序中進行修改,避免被微博強制斷掉連接。

        好啦,不多說,直接上代碼:

        

import requests
import json
import re

def bcpl(weibo_id, url, headers, number):
    count = 0 #設置一個初始變量count爲0來進行計數
    with open("微博id" + str(weibo_id) + ".txt", "a", encoding="utf8") as f: #打開一個名爲“微博idxxxxxx”的txt文件,編碼utf-8
        # 當count數量小於預期的number時,進行循環
        while count < number:
            # 判斷是不是第一組評論,如果是的話,第一組評論不需要加max_id,之後的需要加
            if count == 0:
                try:
                    url = url + weibo_id + '&mid=' + weibo_id + '&max_id_type=0'
                    print("url: " + url)
                    web_data = requests.get(url, headers=headers) #F12查看data信息
                    js_con = web_data.json() #轉換一下數據格式
                    print("json : ", js_con)
                    # 獲取連接下一頁評論的max_id
                    max_id = js_con['data']['max_id'] #max_id在[data]中
                    print(max_id)
                    comments = js_con['data']['data'] #獲得數據中[data]中的[data]
                    # print("con:    ", comments)
                    for one_comment in comments: #依次循環獲得comments中的數據
                        # print("cpm:  ", comment)
                        comment = one_comment["text"] #獲得[text]下的數據,也就是評論數據
                        user = one_comment["user"]
                        user_id = str(user["id"]) + ""
                        # print(type(user_id))
                        user_name = user["screen_name"]
                        label = re.compile(r'</?\w+[^>]>', re.S) #刪除表情符號
                        comment = re.sub(label, '', comment) #獲得文本評論
                        f.write(comment +":::" + user_id +":::" + str(user_name) +'\n') #寫入到文件中
                        count += 1 #count = count + 1
                    print("已爬取" + str(count) + "條評論!" ) #顯示爬取到第幾條
                except Exception as e:
                    print("出錯了if ", e.__context__)
                    continue
            else:
                try:
                    url = url + weibo_id + 'max_id=' + str(max_id) + '&max_id_type=0'
                    web_data = requests.get(url, headers=headers)
                    js_con = web_data.json()
                    # print("json : ", js_con)
                    max_id = js_con['data']['max_id']
                    comments = js_con['data']['data']
                    for one_comment in comments:
                        comment = one_comment["text"] #獲得[text]下的數據,也就是評論數據
                        user = one_comment["user"]
                        user_id = str(user["id"]) + ""
                        # print(type(user_id))
                        user_name = user["screen_name"]
                        label = re.compile(r'</?\w+[^>]>', re.S) #刪除表情符號
                        comment = re.sub(label, '', comment) #獲得文本評論
                        f.write(comment +":::" + user_id +":::" + user_name +'\n') #寫入到文件中
                        count += 1 #count = count + 1
                    print("已爬取" + str(count) + "條評論!")
                except Exception as e:
                    print("出錯了" ,e)
                    continue


if __name__ == "__main__":
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'
    } #設置user-agent來進行僞裝,突破微博反爬限制
    url = 'https://m.weibo.cn/comments/hotflow?id='
    weibo_id = '4514293905404071' # 要爬取的微博id #[url=https://m.weibo.cn/detail/4478512314460101]https://m.weibo.cn/detail/4478512314460101[/url]
    #打開微博手機端網頁[url=https://m.weibo.cn]https://m.weibo.cn[/url],找到要爬取的微博id!
    #手機端網頁!手機端網頁!手機端網頁!
    number = 1000  # 設置爬取評論量,爬取量在第X組,爬取時會爬取下來該組的數據,所以最終數據可能會大於number,一般是個整10的數
    print("test")
    bcpl(weibo_id, url, headers, number)

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章