今天小編給大家分享一下如何利用Python網(wǎng)絡(luò)爬蟲抓取微信朋友圈的動(dòng)態(tài)信息,實(shí)際上如果單獨(dú)的去爬取朋友圈的話,難度會(huì)非常大,因?yàn)槲⑿艣]有提供向網(wǎng)易云音樂這樣的API接口,所以很容易找不到門。不過不要慌,小編在網(wǎng)上找到了第三方工具,它可以將朋友圈進(jìn)行導(dǎo)出,之后便可以像我們正常爬蟲網(wǎng)頁一樣進(jìn)行抓取信息了。
就提供了這樣一種服務(wù),支持朋友圈導(dǎo)出,并排版生成微信書。本文的主要參考資料來源于這篇博文:
感謝大佬提供的接口和思路。具體的教程如下。
一、獲取朋友圈數(shù)據(jù)入口
1、關(guān)注公眾號【出書啦】
2、之后在主頁中點(diǎn)擊【創(chuàng)作書籍】-->【微信書】。
3、點(diǎn)擊【開始制作】-->【添加隨機(jī)分配的出書啦小編為好友即可】,長按二維碼之后便可以進(jìn)行添加好友了。
4、之后耐心等待微信書制作,待完成之后,會(huì)收到小編發(fā)送的消息提醒,如下圖所示。
至此,我們已經(jīng)將微信朋友圈的數(shù)據(jù)入口搞定了,并且獲取了外鏈。
確保朋友圈設(shè)置為【全部開放】,默認(rèn)就是全部開放,如果不知道怎么設(shè)置的話,請自行百度吧。
5、點(diǎn)擊該外鏈,之后進(jìn)入網(wǎng)頁,需要使用微信掃碼授權(quán)登錄。
6、掃碼授權(quán)之后,就可以進(jìn)入到微信書網(wǎng)頁版了,如下圖所示。
7、接下來我們就可以正常的寫爬蟲程序進(jìn)行抓取信息了。在這里,小編采用的是Scrapy爬蟲框架,Python用的是3版本,集成開發(fā)環(huán)境用的是Pycharm。
二、創(chuàng)建爬蟲項(xiàng)目
1、確保您的電腦上已經(jīng)安裝好了Scrapy。之后選定一個(gè)文件夾,在該文件夾下進(jìn)入命令行,輸入執(zhí)行命令:
scrapy startproject weixin_moment
,等待生成Scrapy爬蟲項(xiàng)目。
2、在命令行中輸入cd weixin_moment,進(jìn)入創(chuàng)建的weixin_moment目錄。之后輸入命令:
scrapy genspider 'moment' 'chushu.la'
,創(chuàng)建朋友圈爬蟲,如下圖所示。
3、執(zhí)行以上兩步后的文件夾結(jié)構(gòu)如下:
三、分析網(wǎng)頁數(shù)據(jù)
1、進(jìn)入微信書首頁,按下F12,建議使用谷歌瀏覽器,審查元素,點(diǎn)擊“Network”選項(xiàng)卡,然后勾選“Preserve log”,表示保存日志,如下圖所示??梢钥吹街黜摰恼埱蠓绞绞莋et,返回的狀態(tài)碼是200,代表請求成功。
2、點(diǎn)擊“Response”(服務(wù)器響應(yīng)),可以看到系統(tǒng)返回的數(shù)據(jù)是JSON格式的。說明我們之后在程序中需要對JSON格式的數(shù)據(jù)進(jìn)行處理。
3、點(diǎn)擊微信書的“導(dǎo)航”窗口,可以看到數(shù)據(jù)是按月份進(jìn)行加載的。當(dāng)點(diǎn)擊導(dǎo)航按鈕,其加載對應(yīng)月份的朋友圈數(shù)據(jù)。
4、當(dāng)點(diǎn)擊【2014/04】月份,之后查看服務(wù)器響應(yīng)數(shù)據(jù),可以看到頁面上顯示的數(shù)據(jù)和服務(wù)器的響應(yīng)是相對應(yīng)的。
5、查看請求方式,可以看到此時(shí)的請求方式變成了POST。細(xì)心的伙伴可以看到在點(diǎn)擊“下個(gè)月”或者其他導(dǎo)航月份的時(shí)候,主頁的URL是始終沒有變化的,說明該網(wǎng)頁是動(dòng)態(tài)加載的。之后對比多個(gè)網(wǎng)頁請求,我們可以看到在“Request Payload”下邊的數(shù)據(jù)包參數(shù)不斷的發(fā)生變化,如下圖所示。
6、展開服務(wù)器響應(yīng)的數(shù)據(jù),將數(shù)據(jù)放到JSON在線解析器里,如下圖所示:
可以看到朋友圈的數(shù)據(jù)存儲(chǔ)在paras /data節(jié)點(diǎn)下。
接下來將寫程序,進(jìn)行數(shù)據(jù)抓取。接著往下繼續(xù)深入。
四、代碼實(shí)現(xiàn)
1、修改Scrapy項(xiàng)目中的items.py文件。我們需要獲取的數(shù)據(jù)是朋友圈和發(fā)布日期,因此在這里定義好日期和動(dòng)態(tài)兩個(gè)屬性,如下圖所示。
2、修改實(shí)現(xiàn)爬蟲邏輯的主文件moment.py,首先要導(dǎo)入模塊,尤其是要主要將items.py中的WeixinMomentItem類導(dǎo)入進(jìn)來,這點(diǎn)要特別小心別被遺漏了。之后修改start_requests方法,具體的代碼實(shí)現(xiàn)如下圖。
3、修改parse方法,對導(dǎo)航數(shù)據(jù)包進(jìn)行解析,代碼實(shí)現(xiàn)稍微復(fù)雜一些,如下圖所示。
l需要注意的是從網(wǎng)頁中獲取的response是bytes類型,需要顯示的轉(zhuǎn)為str類型才可以進(jìn)行解析,否則會(huì)報(bào)錯(cuò)。
l在POST請求的限定下,需要構(gòu)造參數(shù),需要特別注意的是參數(shù)中的年、月和索引都需要是字符串類型的,否則服務(wù)器會(huì)返回400狀態(tài)碼,表示請求參數(shù)錯(cuò)誤,導(dǎo)致程序運(yùn)行的時(shí)候報(bào)錯(cuò)。
l在請求參數(shù)還需要加入請求頭,尤其是Referer(反盜鏈)務(wù)必要加上,否則在重定向的時(shí)候找不到網(wǎng)頁入口,導(dǎo)致報(bào)錯(cuò)。
l上述的代碼構(gòu)造方式并不是唯一的寫法,也可以是其他的。
4、定義parse_moment函數(shù),來抽取朋友圈數(shù)據(jù),返回的數(shù)據(jù)以JSON加載的,用JSON去提取數(shù)據(jù),具體的代碼實(shí)現(xiàn)如下圖所示。
5、在setting.py文件中將ITEM_PIPELINES取消注釋,表示數(shù)據(jù)通過該管道進(jìn)行處理。
6、之后就可以在命令行中進(jìn)行程序運(yùn)行了,在命令行中輸入
scrapy crawl moment -o moment.json
,之后可以得到朋友圈的數(shù)據(jù),在控制臺上輸出的信息如下圖所示。
7、爾后我們得到一個(gè)moment.json文件,里面存儲(chǔ)的是我們朋友圈數(shù)據(jù),如下圖所示。
8、嗯,你確實(shí)沒有看錯(cuò),里邊得到的數(shù)據(jù)確實(shí)讓人看不懂,但是這個(gè)并不是亂碼,而是編碼的問題。解決這個(gè)問題的方式是將原來的moment.json文件刪除,之后重新在命令行中輸入下面的命令:
scrapy crawl moment -o moment.json -s FEED_EXPORT_ENCODING=utf-8,
此時(shí)可以看到編碼問題已經(jīng)解決了,如下圖所示。
-
網(wǎng)絡(luò)爬蟲
+關(guān)注
關(guān)注
1文章
52瀏覽量
8944 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86790 -
微信
+關(guān)注
關(guān)注
6文章
512瀏覽量
27355
原文標(biāo)題:如何利用Python網(wǎng)絡(luò)爬蟲抓取微信朋友圈的動(dòng)態(tài)
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
評論