爬虫注意事项
提到爬蟲大家可能都不陌生,簡單來說,爬蟲就是用代碼來請求互聯網資源,至于怎么處理獲取到的互聯網資源,其實已經不在爬蟲的知識范圍之內了。我是一個做java開發的,所以自然也有用java來做爬蟲的場景。Java爬蟲,在開發人員的眼中,確實沒有python爬蟲那么耀眼,我們知道,python有專門的書籍講爬蟲,而java,想都不要想。不是說java爬蟲不好實現,其實java爬蟲也有非常強大的框架和社區,搜索引擎里面也可以獲取到很多關于java爬蟲的知識。Htmlunit是java中一個用來做爬蟲的比較不好的選擇,因為它對js支持不是很好,解析html頁面也不強,同時對于爬蟲應該有的一些廣度優先爬取的策略都需要開發者自己實現。但是,正是這個沒有界面的瀏覽器框架,我喜歡上了爬蟲。
寫爬蟲應該注意的事情:如果你本身使用了一個比較好的爬蟲框架,那么部分事情你不需要自己關心。
1、 爬蟲整站爬取的策略。在爬取了一些資源網站后發現,網站的結構其實一張圖,每個頁面可以看做是一個節點,但是這個圖不一定是一個全聯通的圖,也就是說我從某個節點出發,按照廣度優先的策略進行爬取,不一定能夠獲取到整個網站的資源。所以廣度優先爬取時的深度和爬取頁面的個數設定不需要一次設置的很大,反而可以做跳躍,也就是,爬取到一定深度,隨機換一個頁面作為根節點從頭。因為廣度優先爬蟲的頁面個數是呈指數級上升的。在達到一定的深度和廣度可以適當的對爬取的頁面進行重新定義。
2、 將你的爬蟲做成多線程模式后,如何確保爬取過的頁面不會被重新爬取,造成爬蟲資源的浪費。基于廣度優先的爬蟲,按照逐層爬取的策略可以有效避免這一點。
3、 對于頁面不可達的情況是否需要做超時處理,如果線程池中有多個爬取線程都在超時等待頁面響應,但是確實有大量頁面不可達的情況,這樣爬蟲的效率會大打折扣。所以,在調用爬蟲爬蟲的時候最好設置獲取頁面的超時時間。
4、 代理ip池
5、 User-agent:這個可以寫成一個字符串數組,每次請求隨機獲取其中一個。
6、 有些爬取界面還需要指定referer,需要自己進行分析。
總結
- 上一篇: 《美国职业橄榄球大联盟》:NFL·王牌四
- 下一篇: 2017-2018 年终总结