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