您好,登錄后才能下訂單哦!
一、前提條件
聲明:本次爬取騰訊視頻里 《最美公里》紀錄片的評論。本次爬取使用的瀏覽器是谷歌瀏覽器
二、分析思路
1、分析評論頁面
根據上圖,我們可以知道:評論使用了Ajax異步刷新技術。這樣就不能使用以前分析當前頁面找出規律的手段了。因為展示的頁面只有部分評論,還有大量的評論沒有被刷新出來。
這時,我們應該想到使用抓包來分析評論頁面刷新的規律。以后大部分爬蟲,都會先使用抓包技術,分析出規律!
2、使用Fiddler進行抓包分析——得出評論網址規律
fiddler如何抓包,這個知識點,需要讀者自行去學習,不在本博客討論范圍。
把上面兩張圖里面的內容對比一下,可以知道這個JS就是評論存放頁面。(這需要大家一個一個找,一般Ajax都是在JS里面,所以這也找JS進行對比即可)
我們復制這個JS的url:右擊 > copy > Just Url
大家可以重復操作幾次,多找幾個JS的url,從url得出規律。下圖是我刷新了4次得到的JS的url:
根據上圖,我們發現url不同的地方有兩處:一是cursor=?;二是_=?。
我們很快就能發現 _=?的規律,它是從1576567187273加1。而cursor=?的規律看不出來。這個時候找到它的規律呢?
(1)百度一下,看前人有沒有爬取過類型的網站,根據他們的規律和方法,去找出規律;
(2)羊毛出在羊身上。我們需要有的大膽想法——會不會這個cursor=?可以根據上一個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=?的值。我們發現一個驚喜!
如下:
一般情況下,我們還要多試幾次,確定我們的想法是正確的。
至此,我們發現了評論的url之間的規律:
三、代碼編寫
import re import random import urllib.request #構建用戶代理 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 #從源碼中獲取評論的數據 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) #獲取評論數據 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()
四、結果展示
總結
以上所述是小編給大家介紹的Python爬取騰訊視頻評論,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!
如果你覺得本文對你有幫助,歡迎轉載,煩請注明出處,謝謝!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。