今天咱們來更新一發

講一講另一種形式的反反爬蟲


整個系列:

不吃夾生飯:反反爬蟲系列(一)?

zhuanlan.zhihu.com
圖標
不吃夾生飯:反反爬蟲系列(二)?

zhuanlan.zhihu.com
圖標
不吃夾生飯:反反爬蟲系列(三)?

zhuanlan.zhihu.com
圖標
不吃夾生飯:反反爬蟲系列(四)?

zhuanlan.zhihu.com
圖標

目標網站:車300 二手車估價

反爬蟲策略: 計算token,放到cookie里,刷新頁面,出現目標頁面

難度:中等偏下

我之前的一篇文章大概講到過如何批量擼這個網站的數據


先吐槽下南京車300,目前我所在的公司的母公司

進入估價頁面,顯示瀏覽器指紋驗證,再是拖滑塊,然後文字點擊

怎麼就沒有銷售出來罵,什麼狗屎用戶體驗

也對,流量都在app上,pc端就是來肝爬蟲的

對於做機器學習要搞OCR文字點擊的,可以去採集訓練集(斜眼笑)

好了,滑動和文字驗證今天咱們不提,就單純講講利用cookie做文章的反爬蟲


進入估價頁面,長醬色的:

然後咱們看源碼,卻是長醬色的:

好了,這裡我提一下為什麼一定要看源碼,很多剛出道的爬蟲工程師,在進入頁面後,習慣性的就是檢索元素,然後抓抓包看看api之類的,接著寫腳本。

然後一請求,這是怎麼回事啊?拿到一段html和原網頁不同,裡面嵌套一大段JavaScript

說到這裡,我們來看看這段js

首先是定義的一個方法

大概就是講重新構造一個url的參數

重點是下面這段 eval()開頭的

我們將eval里的js格式化後,搜索 setParam

大概可以知道,這個大框里就是我們要的東西

setParam就是向url里重新寫一個時間戳

然後重點就是

document.cookie = "spidercooskieXX12=" + t + ";path=/;",
document.cookie = "spidercodeCI12X3=" + r + ";path=/;",

可見,這個要向cookie寫入兩個東東

一個是 spidercooskieXX12 一個是 spidercodeCI12X3

那麼這兩個的所對應的 t 和 r是什麼

繼續回到剛剛的大框里

可以看到

t = "1547796252",
r = o(t + "");
r = r.slice(16, 32) + r.slice(0, 16),

那就簡單了, t是一個像時間戳的東東

r呢,輸出它就行了呀

然後我們把大框改寫一下,加一個console輸出r和t

結果呢,會報錯

因為純粹的js環境沒有DOM,在這裡我們需要在文件里添加

var window = {};
var document = {};
window.document = {};
window.location = {};
window.location.href = http://www.che300.com;
window.location.search = null;

如果在chrome里調試,就不用管,但是要把

window.location.href = setParam("rt", new Date().getTime()

這句刪了,不然還沒看到輸出,頁面就刷新了

然後運行

拿到數據

然後,再次請求剛剛的url,同時在cookie加入這倆參數,就可以看到正確的頁面了


總結:

今天這個偏簡單

但是依照筆者在工作中所遇到的實際情況,採用這樣的思路做反爬蟲的網站挺多,比如瓜子二手車

上一次咱們講的是全局的token

這一次咱們講的是每個頁面的token

下一次咱們講每個request的token

另外,咱們拿到數據是一回事,工程上又是一回事,不得不說車300在反爬蟲上下了很大的功夫,據說老闆也是做爬蟲出生的。

嗯,它的app上面,用了簽名驗證,這個我沒逆向過,拿不到如何md5加密的,所以暫時也沒思路

推薦閱讀:

相关文章