?

爬取微博是爬蟲新手入門項(xiàng)目,相對(duì)簡(jiǎn)單。但沒想到還是遇到了些問題。。

0 踩點(diǎn)老規(guī)矩第一步先踩點(diǎn)。某個(gè)用戶的微博網(wǎng)址為:https://weibo.com/u/id,其中id是一長(zhǎng)串?dāng)?shù)字,每個(gè)用戶都有一個(gè)唯一的id" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > 爬蟲|爬取微博動(dòng)態(tài)

爬蟲|爬取微博動(dòng)態(tài)

時(shí)間:2023-05-20 06:32:01 | 來源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-05-20 06:32:01 來源:網(wǎng)站運(yùn)營(yíng)

爬蟲|爬取微博動(dòng)態(tài):

?

爬取微博是爬蟲新手入門項(xiàng)目,相對(duì)簡(jiǎn)單。但沒想到還是遇到了些問題。。

0 踩點(diǎn)

老規(guī)矩第一步先踩點(diǎn)。某個(gè)用戶的微博網(wǎng)址為:https://weibo.com/u/id,其中id是一長(zhǎng)串?dāng)?shù)字,每個(gè)用戶都有一個(gè)唯一的id對(duì)應(yīng)。

打開網(wǎng)址后,右鍵-檢查,切換到Network面板。往下滑,可以發(fā)現(xiàn)在微博加載出來的同時(shí),Network也加載出來一些東西。推測(cè)這兩者是有關(guān)系的。

在這個(gè)網(wǎng)址摸索一番之后沒有任何收獲,找不到有用的信息。

后來查閱資料發(fā)現(xiàn),我打開的這個(gè)網(wǎng)址是PC端的,信息比較多,結(jié)構(gòu)也比較復(fù)雜。一般來說,都是選擇m端即mobile端也即手機(jī)端的頁(yè)面進(jìn)行爬取,雖然有時(shí)候信息會(huì)少一些,但是爬取難度低。

那要怎么打開m端頁(yè)面呢?直接在PC端的網(wǎng)址前加個(gè)m.就行了!其實(shí)真正的m端網(wǎng)址是:https://m.weibo.cn/p/id2,但是加個(gè)m.就行了,會(huì)自動(dòng)跳轉(zhuǎn)到正確的m端網(wǎng)址去。id2和前面的PC端的id不一樣,不過id2不重要,不需要研究他。




看起來就比PC端頁(yè)面清爽多了啊...

接下來還是相同套路,右鍵-檢查,切換到Network面板。往下滑,在加載出的文件中尋找可能有用的信息。耐心查找之后就可以發(fā)現(xiàn):

這一堆數(shù)據(jù)就是和微博動(dòng)態(tài)相關(guān)的,隨便打開一個(gè)就看到了相關(guān)信息。當(dāng)然要想知道具體和微博中的什么信息對(duì)應(yīng),還要經(jīng)過細(xì)心比對(duì)。

但是任務(wù)依然沒有完成,因?yàn)槲覀儧]有發(fā)現(xiàn)前后數(shù)據(jù)的關(guān)系。

containerid是固定的,但是since_id卻沒有規(guī)律,或者說我們沒有發(fā)現(xiàn)這個(gè)參數(shù)的規(guī)律,那么我們就無法實(shí)現(xiàn)自動(dòng)爬取。

卡在這里挺久的,去往上查了資料發(fā)現(xiàn)不久(可能就幾個(gè)月)前,還有一個(gè)參數(shù)page來表示是第幾頁(yè)的動(dòng)態(tài)。

page=1就得到第1頁(yè)的動(dòng)態(tài),page=2就得到page第2頁(yè)的動(dòng)態(tài)。page這個(gè)參數(shù)顯然比since_id好用得多。

經(jīng)過測(cè)試,我發(fā)現(xiàn)page參數(shù)還是能用的。

但是我認(rèn)為我并沒有解決問題,因?yàn)槲覜]有自己從微博網(wǎng)頁(yè)發(fā)現(xiàn)page參數(shù)!所以我繼續(xù)尋找。

1 繼續(xù)尋找

經(jīng)過很多次且很隨意的測(cè)試,我發(fā)現(xiàn)了一個(gè)更簡(jiǎn)潔的頁(yè)面。先點(diǎn)擊主頁(yè),然后劃到最下面,再點(diǎn)擊查看全部微博。

跳轉(zhuǎn)到另一個(gè)頁(yè)面:

這個(gè)頁(yè)面又比剛剛的頁(yè)面少了很多花里胡哨的東西。所以呢,還是那個(gè)套路。。

這次就發(fā)現(xiàn)了page參數(shù),發(fā)現(xiàn)了有規(guī)律的網(wǎng)址!

又經(jīng)過多次測(cè)試,發(fā)現(xiàn)只有containerid和page這兩個(gè)參數(shù)是有用的,其他參數(shù)不影響,可以刪除!我們現(xiàn)在終于知道微博動(dòng)態(tài)所在的網(wǎng)址了。

2 代碼

現(xiàn)在就可以開始寫代碼了。

包導(dǎo)入和變量定義。

import requestsfrom pyquery import PyQuery as pqfrom wordcloud import WordCloudfrom PIL import Imageimport jiebaimport numpy as npweibo_id = '' # 微博用戶idbase_url = 'https://m.weibo.cn/api/container/getIndex?containerid=230413' + weibo_id + '&page='headers = { 'Accept': 'application/json, text/plain, */*', 'MWeibo-Pwa': '1', 'Referer': 'https://m.weibo.cn/u/6132300208', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ' + 'Chrome/75.0.3770.100 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest'}FILE_NAME = 'weibo.txt' # 保存微博文本內(nèi)容IMG_PATH = 'love2.jpg' # 詞云的形狀獲得json格式的數(shù)據(jù)。

def get_content(page_num): url = base_url + str(page_num) response = requests.get(url, headers=headers) if response.status_code == 200: # 200表示正常,沒被限制 content_json = response.json() return content_json else: return [] # 返回空列表解析json,提取需要的文本內(nèi)容。

def parse_json(content_json): text = '' if content_json: items = content_json.get('data').get('cards') for item in items: item = item.get('mblog') # 找到文本內(nèi)容 temp = pq(item.get('text')).text() pos = temp.find('/') # 把之前轉(zhuǎn)發(fā)此微博的人發(fā)的文本內(nèi)容去掉 if pos != -1: temp = temp[:pos] text = text + temp # 找到轉(zhuǎn)發(fā)的微博的文本內(nèi)容 # 如果此微博是本人發(fā)的,retweeted_status就不存在 item = item.get('retweeted_status') if item: text = text + pq(item.get('text')).text() + '/n'? return text制作詞云所需的函數(shù)。

def transform(text): word_list = jieba.cut(text) # 分詞后在單獨(dú)個(gè)體之間加上空格 text = ' '.join(word_list) return text??def get_word_cloud(): with open(FILE_NAME, 'r', encoding='utf-8') as f: img_matrix = Image.open(IMG_PATH) mask = np.array(img_matrix) wc = WordCloud(mask=mask, scale=4, font_path=r'C:/Windows/Fonts/simhei.ttf', background_color='white', max_font_size=40, min_font_size=2)? text = f.read() text = transform(text) wc.generate(text) wc.to_file(weibo_id + 'wc.png')詞云在之前的文章介紹過,這里不再重復(fù)說了。移步

主函數(shù)。

if __name__ == '__main__': all_text = '' # 保存所有的文本 for page in range(1, 11): content_json = get_content(page) text = parse_json(content_json) all_text = all_text + text? # 保存到文件 with open(FILE_NAME, 'w', encoding='utf-8') as f: f.write(all_text)? # 生成詞云 get_word_cloud()

3 結(jié)果

看一下結(jié)果吧。

所以這個(gè)人是什么狀況看得一清二楚了。??梢苑治龅倪€有其他內(nèi)容,比如分析時(shí)間,可以知道這個(gè)人在什么時(shí)間玩微博。

4 一點(diǎn)感想

很早就爬過微博了,本以為會(huì)是很簡(jiǎn)單的一次實(shí)踐卻遇到了困難。

靠自己解決了在網(wǎng)上找不到方法的問題。

第一次知道了還有m站這種東西。

新技能:爬取微博并制作詞云get√




往期瞎寫:













水平有限,如有錯(cuò)誤,歡迎交流和批評(píng)指正!轉(zhuǎn)載注明出處即可。




轉(zhuǎn)自公眾號(hào)「小z的筆記本」

每周更新各種內(nèi)容

包括但不限于Python、爬蟲、其他騷操作

歡迎關(guān)注




?



關(guān)鍵詞:動(dòng)態(tài),爬蟲

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉