這篇文章不算是什么經(jīng)驗分享,頂多是學習記錄吧~
------------------------- 歡迎各路大神批評 ----------------------------------
url-----> 請求url----->請求成功,這往往是最關鍵同時也是最耗時的步驟感凤。
爬蟲是分布式悯周、多線程粒督、多進程?爬蟲需要解析html禽翼、解析json屠橄?爬蟲抓取的數(shù)據(jù)是寫入數(shù)據(jù)庫、寫入本地的CSV闰挡、還是TXT锐墙。這些都必須是“請求成功”這個前提下進行的。
大部分課程講解的主要是這個東西:web_data = requests.get(url)
按照這個東西长酗,的確有部分網(wǎng)站你可以請求成功溪北。但是遇到復雜一點的網(wǎng)站,具有反爬機制的網(wǎng)站夺脾。這個往往是行不通的之拨。
代碼如下:
HTTP狀態(tài)碼(英文HTTP Status Code)
當瀏覽者訪問一個網(wǎng)頁時,瀏覽者的瀏覽器會向網(wǎng)頁所在服務器發(fā)出請求咧叭。當瀏覽器接收并顯示網(wǎng)頁前蚀乔,此網(wǎng)頁所在的服務器會返回一個包含HTTP狀態(tài)碼的信息頭(server header)用以響應瀏覽器的請求。
功能:
1.大規(guī)模抓取時候菲茬,一般需要在request中加入proxy吉挣。保證你的IP不會被封。
2.加入timeout婉弹、headers睬魂、cookies保證請求能順利進行。
3.當出現(xiàn)網(wǎng)絡原因或其他原因造成網(wǎng)站連接失敗镀赌,能夠重新請求氯哮。
4.當這次請求出現(xiàn)200、404佩脊、429蛙粘、503垫卤、403、或者其他狀態(tài)碼時候如何處理出牧。
5.每次請求之后穴肘,隨機sleep一段時間,盡量降低對網(wǎng)站服務器的影響舔痕。
6.加入try except评抚,判斷出現(xiàn)異常時如何處理。
說明:
1.429狀態(tài)碼是由于多進程并發(fā)請求造成的伯复,不處理的話慨代,多請求幾次就可以了。因此啸如,這部分僅僅是放在循環(huán)中侍匙,并沒有進行處理。
2.503狀態(tài)碼是對方服務器的原因叮雳,但是經(jīng)過測試發(fā)現(xiàn)想暗,同樣的request,多次請求之后還是可以轉(zhuǎn)向正確的200帘不。因此這部分也是放到循環(huán)中说莫,沒有進行處理。
3.404是請求的網(wǎng)址為空寞焙,這個經(jīng)過本人測試储狭,大部分網(wǎng)址雖然第一次返回404,但是多次請求還會出現(xiàn)200捣郊。因此多加入了一個判斷辽狈。
4.403是請求沒有被允許,因此需要單獨記錄這部分的url有哪些模她,以方便日后分析稻艰。
友情提示:在抓取對方網(wǎng)站之前,如果對方有robot.txt的話侈净,建議先瀏覽一下尊勿。23333333333