记录网页爬虫注意的几个问题
為什么80%的碼農都做不了架構師?>>> ??
設置合理的user-agent
一些站點會把這個當作很基本的過濾條件,我們就不碰壁了,直接找個瀏覽器粘貼一個,有些文章介紹用一些爬蟲的user-agent,但是對方可能會有相關的爬蟲服務器的 iplist,不過這種情況不多見,可以試一下。
設置合理的爬取間隔
過于頻繁的流量很容易被監控到,當然除了一些沒人管的站點,通常請求ip會被對方禁用一段時間,嚴重的可能會拉入黑名單,這就浪費掉一個 ip 地址了。如果你不是很急的話,我一般設置個 1 到 10 秒的隨機訪問間隔,單線程執行,慢慢爬。一般來說很多站點都能接受這樣的方式,也不會給對方運維人員造成壓力,如果還有限制同個 ip 的訪問次數,那我們還有代理招。
需要登錄權限
有登錄就有注冊,以前很多注冊是需要驗證郵箱,通過SMTP協議讀取郵件內容實現自動化是個思路,前提你也要有很多郵箱地址,牛逼的你可以自己搭建個郵件服務器,要多少有多少。現在很多是通過手機號碼的驗證碼了,這個就麻煩了,首先要有很多設備插很多sim卡接收短信,然后還要在這些設備上把數據傳到你運行的那臺機子解析出驗證碼才能把整個流程自動化。反正我是沒試過,一般我都是手工注冊幾個。
登錄的話就會簡單一些,把用戶名和密碼post上去之后根據服務端返回的Set-Cookie設置好相關請求頭就行了,甚至有些框架都幫你處理好了。如果需要驗證碼的話,出門左拐去購買破解驗證碼的接口或者自己實現吧,拿到憑證后就可以在相關頁面里面橫沖直撞了。當然,你也可以像我一樣手動在瀏覽器上登錄,拿到Set-Cookie之后在進行后面的操作。
增量爬取
如果爬的內容非常多,你永遠也不知道在什么時候就 GameOver 了,因此一定要保存好你的進度,通常來說抓取工作都很重,抓到半天然后從頭開始,It sucks ! 多寫一點代碼換來的好處是值得的。
代理魔法好
關于拉內容,這里介紹的是終極大招了。有了代理服務器,你就相當于找到了多個幫你干活的小弟,而且還是遠程指揮,被封了也不會影響到你的本尊。
代理的來源:你可以自己用工具去掃描全網找到可用的免費代理,也可以像筆者一樣偷懶去購買一些可用的代理。
代理的使用策略:你可能擁有了便宜甚至免費的代理地址,但是這里面很多可能都沒法使用,或者現在能用,待會就不能用了,因此在使用之前應該測試一下,及時移除不能用的地址,提高效率。另外,注意不要用一個代理地址連續范圍,筆者的策略一般是每個請求順序換一個代理地址,如果數量足夠多的前提下,你可以盡可能地提升你的爬取線程或者進程數,由于每個 ip 的訪問間隔足夠長,這樣也不會被封 ip 。
內容解析
在沒認識Jsoup之前,筆者一般通過正則表達式和字符串的處理來濾出想要的內容,如果你還在拼難寫的正則表達式,不妨可以試一下 Jsoup 。
Ajax異步內容
現在很多單頁的應用都是先把 js 和基本的頁面框架先加載,然后在異步請求一些其他的內容,比如很多的下拉到底部請求下一頁的列表數據。對于這樣的情況,我建議還是讀一下它的 js 代碼,然后模擬這個過程,這樣爬取效率會更高一些;另外也可以selenium這樣的工具來模擬瀏覽器的執行,這個筆者還沒用過。
總結
抓取信息其實是個攻與防的過程,總結規律,多測試和踐行你的想法,找到合適的策略。最后,善用工具,但行好事哈~
參考
這里也有我發布的文章:https://yedaxia.github.io
轉載于:https://my.oschina.net/daxia/blog/1216588
總結
以上是生活随笔為你收集整理的记录网页爬虫注意的几个问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “大院大所”合作对接活动专场推介会侧记
- 下一篇: POJ-3268-最短路(dijkstr