如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)
前天給大家分享了如何利用Python網(wǎng)絡(luò)爬蟲爬取微信朋友圈數(shù)據(jù)的上篇(理論篇),今天給大家分享一下代碼實(shí)現(xiàn)(實(shí)戰(zhàn)篇),接著上篇往下繼續(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文件,里面存儲的是我們朋友圈數(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)解決了,如下圖所示。
下一篇文章,小編帶大家將抓取到的朋友圈數(shù)據(jù)進(jìn)行可視化展示,敬請關(guān)注~~
總結(jié)
以上是生活随笔為你收集整理的如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ora-01017 invalid us
- 下一篇: laravel使用redis做缓存的方法