Python爬取騰訊視頻評論的思路詳解
一、前提條件
- 安裝了Fiddler了(用于抓包分析)
- 谷歌或火狐瀏覽器
- 如果是谷歌瀏覽器,還需要給谷歌瀏覽器安裝一個SwitchyOmega插件,用于代理服務器
- 有Python的編譯環(huán)境,一般選擇Python3.0及以上
聲明:本次爬取騰訊視頻里 《最美公里》紀錄片的評論。本次爬取使用的瀏覽器是谷歌瀏覽器
二、分析思路
1、分析評論頁面

根據(jù)上圖,我們可以知道:評論使用了Ajax異步刷新技術(shù)。這樣就不能使用以前分析當前頁面找出規(guī)律的手段了。因為展示的頁面只有部分評論,還有大量的評論沒有被刷新出來。
這時,我們應該想到使用抓包來分析評論頁面刷新的規(guī)律。以后大部分爬蟲,都會先使用抓包技術(shù),分析出規(guī)律!
2、使用Fiddler進行抓包分析——得出評論網(wǎng)址規(guī)律
fiddler如何抓包,這個知識點,需要讀者自行去學習,不在本博客討論范圍。


把上面兩張圖里面的內(nèi)容對比一下,可以知道這個JS就是評論存放頁面。(這需要大家一個一個找,一般Ajax都是在JS里面,所以這也找JS進行對比即可)
我們復制這個JS的url:右擊 > copy > Just Url
大家可以重復操作幾次,多找?guī)讉€JS的url,從url得出規(guī)律。下圖是我刷新了4次得到的JS的url:

根據(jù)上圖,我們發(fā)現(xiàn)url不同的地方有兩處:一是cursor=?;二是_=?。
我們很快就能發(fā)現(xiàn) _=?的規(guī)律,它是從1576567187273加1。而cursor=?的規(guī)律看不出來。這個時候找到它的規(guī)律呢?
(1)百度一下,看前人有沒有爬取過類型的網(wǎng)站,根據(jù)他們的規(guī)律和方法,去找出規(guī)律;
(2)羊毛出在羊身上。我們需要有的大膽想法——會不會這個cursor=?可以根據(jù)上一個JS頁面得到呢?這只是很多大膽想法中的一個,我們就一個想法一個想法的試試。
我們就采用第二種方法,去js里面找。復制其中一個url為:
url = https://video.coral.qq.com/varticle/3242201702/comment/v2?callback=_varticle3242201702commentv2&orinum=10&oriorder=o&pageflag=1&cursor=6460163812968870071&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_=1576567187273
去瀏覽器里面打開,在里面搜索一下此url的下一個url的cursor=?的值。我們發(fā)現(xiàn)一個驚喜!

如下:
一般情況下,我們還要多試幾次,確定我們的想法是正確的。
至此,我們發(fā)現(xiàn)了評論的url之間的規(guī)律:
- _=?從1576567187273加1
- cursor=?的值存在上面一個JS中。
三、代碼編寫
import re
import random
import urllib.request
#構(gòu)建用戶代理
uapools=["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0",
]
#從用戶代理池隨機選取一個用戶代理
def ua(uapools):
thisua=random.choice(uapools)
#print(thisua)
headers=("User-Agent",thisua)
opener=urllib.request.build_opener()
opener.addheaders=[headers]
#設置為全局變量
urllib.request.install_opener(opener)
#獲取源碼
def get_content(page,lastId):
url="https://video.coral.qq.com/varticle/3242201702/comment/v2?callback=_varticle3242201702commentv2&orinum=10&oriorder=o&pageflag=1&cursor="+lastId+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag=1&source=132&_="+str(page)
html=urllib.request.urlopen(url).read().decode("utf-8","ignore")
return html
#從源碼中獲取評論的數(shù)據(jù)
def get_comment(html):
pat='"content":"(.*?)"'
rst = re.compile(pat,re.S).findall(html)
return rst
#從源碼中獲取下一輪刷新頁的ID
def get_lastId(html):
pat='"last":"(.*?)"'
lastId = re.compile(pat,re.S).findall(html)[0]
return lastId
def main():
ua(uapools)
#初始頁面
page=1576567187274
#初始待刷新頁面ID
lastId="6460393679757345760"
for i in range(1,6):
html = get_content(page,lastId)
#獲取評論數(shù)據(jù)
commentlist=get_comment(html)
print("------第"+str(i)+"輪頁面評論------")
for j in range(1,len(commentlist)):
print("第"+str(j)+"條評論:" +str(commentlist[j]))
#獲取下一輪刷新頁ID
lastId=get_lastId(html)
page += 1
main()
四、結(jié)果展示

總結(jié)
以上所述是小編給大家介紹的Python爬取騰訊視頻評論,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
對Pandas DataFrame缺失值的查找與填充示例講解
今天小編就為大家分享一篇對Pandas DataFrame缺失值的查找與填充示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11
windows7 32、64位下python爬蟲框架scrapy環(huán)境的搭建方法
這篇文章主要介紹了windows7 32、64位下python爬蟲框架scrapy環(huán)境的搭建方法,需要的朋友可以參考下2018-11-11
用ldap作為django后端用戶登錄驗證的實現(xiàn)
這篇文章主要介紹了用ldap作為django后端用戶登錄驗證的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-12-12
淺談python 四種數(shù)值類型(int,long,float,complex)
下面小編就為大家?guī)硪黄獪\談python 四種數(shù)值類型(int,long,float,complex)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
Python必備shelve與dbm本地持久化存儲數(shù)據(jù)的兩個強大工具
當涉及存儲大量數(shù)據(jù)并且需要高效訪問時,shelve和dbm模塊是Python中用于本地持久化存儲數(shù)據(jù)的兩個強大工具,它們允許開發(fā)人員以鍵值對的形式存儲數(shù)據(jù),并支持快速的檢索和更新操作,在本文將深入探討這兩個模塊,展示它們的優(yōu)勢和應用場景2024-01-01
TensorFlow深度學習另一種程序風格實現(xiàn)卷積神經(jīng)網(wǎng)絡
這篇文章主要介紹了TensorFlow卷積神經(jīng)網(wǎng)絡的另一種程序風格實現(xiàn)方式示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11

