Python爬取騰訊視頻評(píng)論的思路詳解
一、前提條件
- 安裝了Fiddler了(用于抓包分析)
- 谷歌或火狐瀏覽器
- 如果是谷歌瀏覽器,還需要給谷歌瀏覽器安裝一個(gè)SwitchyOmega插件,用于代理服務(wù)器
- 有Python的編譯環(huán)境,一般選擇Python3.0及以上
聲明:本次爬取騰訊視頻里 《最美公里》紀(jì)錄片的評(píng)論。本次爬取使用的瀏覽器是谷歌瀏覽器
二、分析思路
1、分析評(píng)論頁(yè)面
根據(jù)上圖,我們可以知道:評(píng)論使用了Ajax異步刷新技術(shù)。這樣就不能使用以前分析當(dāng)前頁(yè)面找出規(guī)律的手段了。因?yàn)檎故镜捻?yè)面只有部分評(píng)論,還有大量的評(píng)論沒(méi)有被刷新出來(lái)。
這時(shí),我們應(yīng)該想到使用抓包來(lái)分析評(píng)論頁(yè)面刷新的規(guī)律。以后大部分爬蟲,都會(huì)先使用抓包技術(shù),分析出規(guī)律!
2、使用Fiddler進(jìn)行抓包分析——得出評(píng)論網(wǎng)址規(guī)律
fiddler如何抓包,這個(gè)知識(shí)點(diǎn),需要讀者自行去學(xué)習(xí),不在本博客討論范圍。
把上面兩張圖里面的內(nèi)容對(duì)比一下,可以知道這個(gè)JS就是評(píng)論存放頁(yè)面。(這需要大家一個(gè)一個(gè)找,一般Ajax都是在JS里面,所以這也找JS進(jìn)行對(duì)比即可)
我們復(fù)制這個(gè)JS的url:右擊 > copy > Just Url
大家可以重復(fù)操作幾次,多找?guī)讉€(gè)JS的url,從url得出規(guī)律。下圖是我刷新了4次得到的JS的url:
根據(jù)上圖,我們發(fā)現(xiàn)url不同的地方有兩處:一是cursor=?;二是_=?。
我們很快就能發(fā)現(xiàn) _=?的規(guī)律,它是從1576567187273加1。而cursor=?的規(guī)律看不出來(lái)。這個(gè)時(shí)候找到它的規(guī)律呢?
(1)百度一下,看前人有沒(méi)有爬取過(guò)類型的網(wǎng)站,根據(jù)他們的規(guī)律和方法,去找出規(guī)律;
(2)羊毛出在羊身上。我們需要有的大膽想法——會(huì)不會(huì)這個(gè)cursor=?可以根據(jù)上一個(gè)JS頁(yè)面得到呢?這只是很多大膽想法中的一個(gè),我們就一個(gè)想法一個(gè)想法的試試。
我們就采用第二種方法,去js里面找。復(fù)制其中一個(gè)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的下一個(gè)url的cursor=?的值。我們發(fā)現(xiàn)一個(gè)驚喜!
如下:
一般情況下,我們還要多試幾次,確定我們的想法是正確的。
至此,我們發(fā)現(xiàn)了評(píng)論的url之間的規(guī)律:
- _=?從1576567187273加1
- cursor=?的值存在上面一個(gè)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", ] #從用戶代理池隨機(jī)選取一個(gè)用戶代理 def ua(uapools): thisua=random.choice(uapools) #print(thisua) headers=("User-Agent",thisua) opener=urllib.request.build_opener() opener.addheaders=[headers] #設(shè)置為全局變量 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 #從源碼中獲取評(píng)論的數(shù)據(jù) def get_comment(html): pat='"content":"(.*?)"' rst = re.compile(pat,re.S).findall(html) return rst #從源碼中獲取下一輪刷新頁(yè)的ID def get_lastId(html): pat='"last":"(.*?)"' lastId = re.compile(pat,re.S).findall(html)[0] return lastId def main(): ua(uapools) #初始頁(yè)面 page=1576567187274 #初始待刷新頁(yè)面ID lastId="6460393679757345760" for i in range(1,6): html = get_content(page,lastId) #獲取評(píng)論數(shù)據(jù) commentlist=get_comment(html) print("------第"+str(i)+"輪頁(yè)面評(píng)論------") for j in range(1,len(commentlist)): print("第"+str(j)+"條評(píng)論:" +str(commentlist[j])) #獲取下一輪刷新頁(yè)ID lastId=get_lastId(html) page += 1 main()
四、結(jié)果展示
總結(jié)
以上所述是小編給大家介紹的Python爬取騰訊視頻評(píng)論,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
基于CentOS搭建Python Django環(huán)境過(guò)程解析
這篇文章主要介紹了基于CentOS搭建Python Django環(huán)境過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-0868行Python代碼實(shí)現(xiàn)帶難度升級(jí)的貪吃蛇
本文主要介紹了Python代碼實(shí)現(xiàn)帶難度升級(jí)的貪吃蛇,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Python無(wú)法用requests獲取網(wǎng)頁(yè)源碼的解決方法
爬蟲獲取信息,很多時(shí)候是需要從網(wǎng)頁(yè)源碼中獲取鏈接信息的,下面這篇文章主要給大家介紹了關(guān)于Python無(wú)法用requests獲取網(wǎng)頁(yè)源碼的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07詳談python3 numpy-loadtxt的編碼問(wèn)題
下面小編就為大家分享一篇詳談python3 numpy-loadtxt的編碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04使用LibTorch進(jìn)行C++調(diào)用pytorch模型方式
這篇文章主要介紹了使用LibTorch進(jìn)行C++調(diào)用pytorch模型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-12-12python實(shí)現(xiàn)實(shí)時(shí)監(jiān)控文件的方法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)實(shí)時(shí)監(jiān)控文件的3種方法,感興趣的小伙伴們可以參考一下2016-08-08快速解決jupyter notebook啟動(dòng)需要密碼的問(wèn)題
這篇文章主要介紹了快速解決jupyter notebook啟動(dòng)需要密碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04