背景
目前很多知名的網(wǎng)站都增加一些反爬蟲手段竹握,使得編寫爬蟲時(shí)并不那么理想抖格,有些網(wǎng)站很難破解其反爬技術(shù)冕房。如利用puppeteer技術(shù)操作頁面時(shí)生逸,往往出現(xiàn)一些加載異常牢屋,容易被網(wǎng)站檢測(cè)程序探測(cè)到而拒絕響應(yīng)。
方案
瀏覽器擴(kuò)展程序油猴(tampermonkey)似乎可以做很多事件槽袄,對(duì)分析網(wǎng)頁與事件處理有大的能力空間烙无。由于油猴是在用戶手動(dòng)打開的瀏覽器下運(yùn)行的,完全是與真人操作類似遍尺,可能不那么容易被檢測(cè)到截酷。
思路是這樣的:
第一步:人工啟動(dòng)瀏覽器,導(dǎo)航到要抓取數(shù)據(jù)的頁面乾戏;(這一步是唯一人工干擾的)
第二步:油猴自動(dòng)啟動(dòng)迂苛,分析頁面,處理頁面數(shù)據(jù)鼓择;
第三步:將獲得的數(shù)據(jù)通過GM_xmlhttpRequest接口推送到后臺(tái)數(shù)據(jù)接收服務(wù)三幻,將數(shù)據(jù)入庫;
第三步:獲得“下一頁”標(biāo)簽元素呐能,觸發(fā)下一頁請(qǐng)求念搬;返回第二步重復(fù)運(yùn)行;
第四步:沒有“下一頁”時(shí)催跪,程序退出锁蠕。
缺點(diǎn)及優(yōu)化
上述方案的缺點(diǎn)很明顯,那就是第一步必須是人工啟動(dòng)瀏覽懊蒸,導(dǎo)航到具體頁面荣倾,沒有計(jì)劃任務(wù)。
當(dāng)然這不是大問題骑丸,還是利用油猴舌仍,編寫一個(gè)計(jì)劃任務(wù)的腳本來解決上述問題妒貌,即利用js定時(shí)器,觸發(fā)指定的頁面铸豁。更進(jìn)一步灌曙,我們有好多爬蟲腳本,這時(shí)我們就做一個(gè)任務(wù)隊(duì)列节芥,讓js定時(shí)器通過導(dǎo)航到指定頁面來啟動(dòng)對(duì)應(yīng)的js腳本在刺。js定時(shí)器的@match值為http://*/*
。
具體做法是:
一头镊、編輯js定時(shí)器(計(jì)劃任務(wù))蚣驼,實(shí)現(xiàn)定時(shí)打開指定網(wǎng)站;
二相艇、讓瀏覽器始終打開颖杏;
三、部分需要登錄的網(wǎng)站坛芽,先行登錄留储;并讓定時(shí)器第間隔一段時(shí)間(如半小時(shí))刷新一下網(wǎng)站的一個(gè)非數(shù)據(jù)頁面。
四咙轩、爬蟲腳本執(zhí)行完后获讳,盡量關(guān)閉頁簽,以節(jié)省電腦資源臭墨。