今天在爬取某梨短視頻時(shí)放前,發(fā)現(xiàn)前端代碼跟之前都不一樣了。加入了很多的反爬措施糯彬。在此特意記錄一下凭语!
先來看一下最終執(zhí)行結(jié)果:
爬蟲重要的不是寫代碼,而是分析撩扒!分析它的網(wǎng)頁(yè)請(qǐng)求似扔!
爬蟲的基本過程一般如下:
????1-發(fā)送請(qǐng)求
????2-獲取響應(yīng)
????3-解析并提取數(shù)據(jù)
????4-保存數(shù)據(jù)
1.分析翻頁(yè)網(wǎng)頁(yè)
11.首先我們進(jìn)入某梨視頻首頁(yè)如下,今天準(zhǔn)備爬取的排行榜中的視頻:
1.2.點(diǎn)開排行榜網(wǎng)頁(yè)我們先來簡(jiǎn)單分析一下搓谆,發(fā)現(xiàn)它默認(rèn)顯示10個(gè)視頻虫几。
1.3.點(diǎn)擊‘加載更多’或者繼續(xù)下拉它會(huì)繼續(xù)添加10個(gè)視頻。是不是可以簡(jiǎn)單理解為它是以10為步長(zhǎng)的格式來顯示視頻的挽拔?
1.4.我們找到翻頁(yè)功能對(duì)用的這個(gè)鏈接:
1.5.觀察一下這個(gè)翻頁(yè)鏈接:
https://www.pearvideo.com/popular_loading.jsp?reqType=1&categoryId=&start=10&sort=10&mrd=0.4643802437122859
發(fā)現(xiàn)它其中一個(gè)參數(shù):start=10&sort=10
可以確認(rèn)它是從第十條開始的,然后每頁(yè)10條數(shù)據(jù)展示的方式顯示的但校。
1.6.網(wǎng)頁(yè)分析完成之后我們來進(jìn)行編碼:
1.7.可以看出螃诅,我們?cè)诜?yè)這一層已經(jīng)成功的爬到數(shù)據(jù)了。
2.分析視頻網(wǎng)頁(yè)
2.1.接下來我們點(diǎn)開視頻状囱,然后F12找到當(dāng)前視頻的請(qǐng)求鏈接
https://www.pearvideo.com/videoStatus.jsp?contId=1707705&mrd=0.8367214711596567
2.2.然后我們使用該鏈接模擬網(wǎng)絡(luò)請(qǐng)求看是否可以獲取到我們想要的視頻
{"resultCode":"5","resultMsg":"該文章已經(jīng)下線术裸!","systemTime": "1605792063821"}
可以看出這條路是不行的,但是視頻是確實(shí)存在的亭枷,為什么會(huì)顯示文章下線了呢袭艺?有沒有想到被反爬了呢?
2.3.咱們繼續(xù)分析網(wǎng)頁(yè):
我們可以在Elements中也可以發(fā)現(xiàn)一個(gè)視頻鏈接:
https://video.pearvideo.com/mp4/adshort/20201118/cont-1707705-15490519_adpkg-ad_hd.mp4
2.4點(diǎn)開這條鏈接發(fā)現(xiàn)是可以成功播放和下載的叨粘,說明我們最終要獲取的視頻里鏈接就是這條:
但是這條鏈接通過上面網(wǎng)頁(yè)分析是獲取不到的猾编,顯示文章下線還記得嗎瘤睹?所以我們還需要繼續(xù)分析。
2.5經(jīng)過分析觀察答倡,我們?cè)趐review中發(fā)現(xiàn)一個(gè)MP4格式的視頻播放鏈接轰传,會(huì)不會(huì)是這個(gè)呢?
2.6.點(diǎn)開看一下發(fā)現(xiàn)是一條無效的鏈接瘪撇。
2.7.現(xiàn)在通過網(wǎng)頁(yè)分析出三條鏈接:
視頻鏈接:???? https://www.pearvideo.com/videoStatus.jsp?contId=1707705&mrd=0.8367214711596567網(wǎng)頁(yè)可播放鏈接:https://video.pearvideo.com/mp4/adshort/20201118/cont-1707705-15490519_adpkg-ad_hd.mp4網(wǎng)頁(yè)請(qǐng)求連接:https://video.pearvideo.com/mp4/adshort/20201118/1605832871738-15490519_adpkg-ad_hd.mp4
再來捋一下啊获茬。
我們通過視頻鏈接得到的是網(wǎng)頁(yè)請(qǐng)求連接,也就是第三個(gè)倔既。但是這個(gè)鏈接顯示的是404恕曲。
嵌套在網(wǎng)頁(yè)中可播放視頻的真實(shí)鏈接是第二個(gè),但是我們請(qǐng)求不到渤涌。
所以我們就要想法子通過第三個(gè)鏈接構(gòu)造出類似于第二個(gè)的可播放鏈接佩谣。
先來觀察一下他們之間不同之處:發(fā)現(xiàn)這兩個(gè)視頻鏈接不同之處就在于一個(gè)是時(shí)間戳,一個(gè)是video_id歼捏。也就是說我們只要將第三個(gè)鏈接的時(shí)間戳改成跟第二個(gè)一樣的video_id即可成功播放該視頻稿存。但是video_id又是在第一個(gè)鏈接中,所以我們就要想辦法通過造出這條第二條可播放視頻的鏈接瞳秽。
2.8.剛才通過翻頁(yè)鏈接我們已經(jīng)得到video_id和video_name了瓣履。
2.9現(xiàn)在我們需要用正則將其提取出來即可:
['1707591', '1707705', '1707750', '1707696', '1707630', '1707694', '1707710', '1707688', '1707716']
['女大學(xué)生自殺留遺書稱遭系領(lǐng)導(dǎo)性騷擾:常被摟抱,讓叫其爸爸', '外賣小哥大火中救出同行:即使自己被燒练俐,也必須救人', '無錫城管回應(yīng)文明城市落選后抓狗:落選暴露出弊端袖迎,加強(qiáng)管理', '延期2年交房每平還要漲價(jià)1500元,售樓處:不同意就按退房處理', '蛋殼公寓稱仍可正常租房,律師支招蛋殼租客房東如何維權(quán)', '護(hù)士在副院長(zhǎng)家樓頂自殺,父母拒收32萬賠償:他要求我們不發(fā)聲', '幼兒園點(diǎn)名憑空多出1個(gè)娃,誰都不認(rèn)識(shí):親媽首次送還送錯(cuò)地方', '痛惜腺晾!安徽2名藍(lán)天救援隊(duì)員潛水訓(xùn)練時(shí)遇難燕锥,一人捐出遺體', '四川眉山一水泥罐車與公交車追尾,致15人受傷悯蝉,事發(fā)監(jiān)控曝光', '愛馬仕將建最大鱷魚養(yǎng)殖場(chǎng)归形,5萬只用來供應(yīng)皮革和肉類產(chǎn)品']
2.10可以發(fā)現(xiàn)我們視頻所需的video_id和video_name都已經(jīng)被展示出來了
2.11接下來就是提取視頻播放鏈接然后替換我們已經(jīng)獲取到video_id即可。還記得剛才的文章下線嗎鼻由,就是被反爬了暇榴。加入我們的爬蟲三件套。
2.12可以看出我們獲取到視頻播放鏈接蕉世,再不是剛才的文章下線提示了蔼紧。但這個(gè)不是真正的地址。還需要用video_id進(jìn)行對(duì)時(shí)間戳的替換
https://video.pearvideo.com/mp4/adshort/20201118/1605835214479-15490655_adpkg-ad_hd.mp4https://video.pearvideo.com/mp4/adshort/20201118/1605835231211-15490519_adpkg-ad_hd.mp4https://video.pearvideo.com/mp4/adshort/20201119/1605835236250-15490907_adpkg-ad_hd.mp4https://video.pearvideo.com/mp4/adshort/20201118/1605835241582-15490403_adpkg-ad_hd.mp4
2.13所以接下來我們要做的就是替換狠轻,我們用正則表達(dá)式來實(shí)現(xiàn)
2.14可以看到所有鏈接的時(shí)間戳都已經(jīng)成功被video_id替換奸例。接下來我們找一個(gè)真實(shí)的鏈接試一下看是否可以成功播放
2.15可以看到是沒有任何問題的。
接下來我們需要將這些視頻進(jìn)行保存向楼。
2.16現(xiàn)在視頻已經(jīng)被我們成功保存到指定位置了查吊!
源碼已經(jīng)上傳谐区,需要的童鞋可以關(guān)注微信公眾號(hào)'印象python'回復(fù)‘某梨視頻’