一、網站robots
robotparser模塊首先加載robots.txt文件,而後經過can_fetch()函數肯定指定的用戶代理是否容許訪問網頁。
二、識別網站技術
三、下載網頁
使用urllib庫,3.6沒有urllib2
根據網頁加
載返回錯誤,進行重試,加強容錯性
Requests庫適合網頁內容獲取,及時性要求不高;
scrapy庫適合全站獲取,實時性,速度要求較高。
四、user_agent
常見的User Agent
Android
-
Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
-
Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
-
Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
Firefox
Google Chrome
-
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
-
Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
iOS
-
Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
-
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3
五、下載限速
當咱們爬取的網站過快,可能會被封禁或形成服務器過載的風險。爲了下降這些風險,咱們能夠在兩次下載之間添加延時,從而對爬蟲限速。
六、避免爬蟲陷阱
想要避免陷入爬蟲陷阱,一人簡單的方法就是記錄到達當前網頁通過了多少個連接,也就是深度。
當達到最大嘗試就再也不向隊列中添加該網頁中的連接了,咱們須要修改seen變量爲一個字典,增長頁面嘗試的記錄。若是想禁用該功能,只需將max_depth設爲一個負數便可。
七、支持代理(Proxy)
有時咱們須要使用代理訪問某個網站。好比Netflix屏蔽美國之外的大多數國家。
八、並行下載
python的機制——多進程比多線程更適合多核並行
線程優點:所謂IO密集型任務,是指磁盤IO、網絡IO佔主要的任務,計算量很小。好比請求網頁、讀寫文件等。固然咱們在Python中能夠利用sleep達到IO密集型任務的目的。
進程優點:所謂計算密集型任務,是指CPU計算佔主要的任務,CPU一直處於滿負荷狀態。好比在一個很大的列表中查找元素(固然這不合理),複雜的加減乘除等。