微博爬蟲可以不借助selenium,直接用Chrome下的手機端模式打開,找到其封裝的json數據,即可爬取,具體步驟如下。
分析過程
以東野圭吾超話爲例,網址爲微博超話。進入頁面後,使用Chrome瀏覽器的檢查功能,打開手機端模式如下:
刷新界面,進行抓包,可發現數據的封裝地址。
接下來,我們分析一下翻頁原理,向下滑動界面,對比兩者的URL
不難發現,只有since_id不一樣。那就找到第一條url的json數據,看看有沒有第二條url的since_id。經過分析發現,第二條的url的since_id在第一條url的PageInfo下!這樣,我們就可以翻頁啦!
爬取代碼:
微博反爬還是有點厲害的!一開始,我只用了一個用戶代理,沒爬到幾條數據後就被檢測出來了。然後,換了隨機用戶代理後,IP地址又被封了。所以,還是老老實實構建代理池弄吧。(IP都是網上找的免費可用的,自己可以先用代碼檢測一下活性)
import requests
import json
import re
import os
import time,random
os.chdir('C:/Users/dell/Desktop')
import pandas as pd
from w3lib.html import remove_tags
base_url='''
https://m.weibo.cn/api/container/getIndex?containerid=1008082daf12cb79491a80017ae2546cc6f49f_-_feed&luicode=10000011
&lfid=100103type%3D533%26t%3D10%26q%3D%E4%B8%9C%E9%87%8E%E5%9C%AD%E5%90%BE&since_id=4487749686029266
'''
head_list=["Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16",
"Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14",
"Mozilla/5.0 (Windows NT 6.0; rv:2.0) Gecko/20100101 Firefox/4.0 Opera 12.14",
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0) Opera 12.14",
"Opera/12.80 (Windows NT 5.1; U; en) Presto/2.10.289 Version/12.02",
]
ip=['114.101.42.16:65309',
'220.179.255.7:8118',
'103.44.145.182:8080',
'115.223.7.110:80']
proxy={'http':random.choice(ip)}
header={'user-agent':random.choice(head_list)}
pat='since_id=(.*)'
inf=[]
for page in range(1,300):
try:
r=requests.get(base_url,headers=header,proxies=proxy)
df=json.loads(r.text)
since_id=df.get('data').get('pageInfo').get('since_id')
data=df.get('data').get('cards')[0].get('card_group')
for item in data:
send_time=item.get('mblog').get('created_at')
content=remove_tags(item.get('mblog').get('text'))
inf.append([send_time,content])
base_url=re.sub(pat,'since_id='+str(since_id),base_url)
print('第{}頁寫入完畢'.format(page))
time.sleep(random.randint(3,5))
except:
print('未爬到數據')
inf1=pd.DataFrame(inf,columns=['發佈時間','內容'])
inf1.to_csv('daily_comment.csv',index=False,encoding='gb18030')
數據可視化
1. 統計各類書籍總討論次數
《白夜行》、《惡意》、《信》討論較多
2. 按月份統計書籍討論次數
從上圖來看,《白夜行》依舊是東野粉的至愛呀,一年中有半年的時間佔討論次數榜首;《惡意》也緊跟其後,分別在1月和8月佔據榜首;《信》在2月和9月佔據榜首;《祈禱落幕時》在4月討論次數最多,《沉默的巡遊》是最近纔出的新書,故佔據了3月的榜首。
3. 統計書中人物的討論次數
亮司和雪穗是《白夜行》的男女主角,石神是《嫌疑人X的獻身》的男主角。而加賀和湯川則是東野圭吾筆下兩個十分有特色的人物。加賀是一名警官,既有縝密的推理能力,心中又有一份溫柔,正因爲如此,所以深受大家喜愛。而湯川是一名物理學家,時常幫助警方處理案件。相對加賀而言,看待事物更加理性、客觀,也深受書迷們的追捧。
4. 討論詞雲圖
5.書籍關聯圖
對微博文字內容進行分詞,並構建共現字典,查看哪些書最容易一起被提到。使用Gephi進行可視化,得到下圖:
上圖的線條越粗,說明兩本書的關聯程度越高!即微博裏的用戶經常一起提到這兩本書。《白夜行》和《惡意》是經常一起被提到!此外,《白夜行》還和《幻夜》一起被提到的(也難怪《幻夜》是《白夜行》的姊妹篇!)