摘要:百度云搜索搜網盤如果爬蟲沒有異常處理,那么爬行中一旦出現錯誤,程序將崩潰停止工作,有異常處理即使出現錯誤也能繼續執行下去常見狀態碼重定向到新的,永久性重定向到臨時,非永久性請求的資源未更新非法請求請求未經授權禁止訪問沒找到對應頁面服務器內部
【百度云搜索:http://www.lqkweb.com】 【搜網盤:http://www.swpan.cn】
如果爬蟲沒有異常處理,那么爬行中一旦出現錯誤,程序將崩潰停止工作,有異常處理即使出現錯誤也能繼續執行下去
1.常見狀態碼
301:重定向到新的URL,永久性
302:重定向到臨時URL,非永久性
304:請求的資源未更新
400:非法請求
401:請求未經授權
403:禁止訪問
404:沒找到對應頁面
500:服務器內部出現錯誤
501:服務器不支持實現請求所需要的功能
2.異常處理
URLError捕獲異常信息
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib.request import urllib.error try: #嘗試執行里面的內容 html = urllib.request.urlopen("http://www.xiaohuar.com/").read().decode("utf-8") print(html) except urllib.error.URLError as e: #如果出現錯誤 if hasattr(e,"code"): #如果有錯誤代碼 print(e.code) #打印錯誤代碼 if hasattr(e,"reason"): #如果有錯誤信息 print(e.reason) #打印錯誤信息 #返回 說明網站禁止了爬蟲訪問 # 403 # Forbidden
瀏覽器偽裝技術
很多網站,做了反爬技術,一般在后臺檢測請求頭信息里是否有User-Agent瀏覽器信息,如果沒有說明不是瀏覽器訪問,就屏蔽了這次請求
所以,我們需要偽裝瀏覽器報頭來請求
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib.request url = "https://www.qiushibaike.com/" #抓取頁面URL tou = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0") #設置模擬瀏覽器報頭 b_tou = urllib.request.build_opener() #創建請求對象 b_tou.addheaders=[tou] #添加報頭 html = b_tou.open(url).read().decode("utf-8") #開始抓取頁面 print(html)
注意:我們可以看到這次請求并不是用urlopen()方法請求的,此時用urlopen()無法請求,但是我們就會感覺到這樣很費勁,難道每次請求都要創建build_opener(),所以我們需要設置使用urlopen()方法請求自動報頭
設置使用urlopen()方法請求自動報頭,也就是設置用戶代理
install_opener()將報頭信息設置為全局,urlopen()方法請求時也會自動添加報頭
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib.request #設置報頭信息 tou = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0") #設置模擬瀏覽器報頭 b_tou = urllib.request.build_opener() #創建請求對象 b_tou.addheaders=[tou] #添加報頭到請求對象 #將報頭信息設置為全局,urlopen()方法請求時也會自動添加報頭 urllib.request.install_opener(b_tou) #請求 url = "https://www.qiushibaike.com/" html = urllib.request.urlopen(url).read().decode("utf-8") print(html)
創建用戶代理池
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib.request import random #引入隨機模塊文件 def yh_dl(): #創建用戶代理池 yhdl = [ "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11", "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", "User-Agent:Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10", "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13", "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+", "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)", "UCWEB7.0.2.37/28/999", "NOKIA5700/ UCWEB7.0.2.37/28/999", "Openwave/ UCWEB7.0.2.37/28/999", "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999" ] thisua = random.choice(yhdl) #隨機獲取代理信息 headers = ("User-Agent",thisua) #拼接報頭信息 opener = urllib.request.build_opener() #創建請求對象 opener.addheaders=[headers] #添加報頭到請求對象 urllib.request.install_opener(opener) #將報頭信息設置為全局,urlopen()方法請求時也會自動添加報頭 #請求 yh_dl() #執行用戶代理池函數 url = "https://www.qiushibaike.com/" html = urllib.request.urlopen(url).read().decode("utf-8") print(html)
這樣爬蟲會隨機調用,用戶代理,也就是隨機報頭,保證每次報頭信息不一樣
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44038.html
摘要:下面我們傳入多個參數構建一個來感受一下在這里我們通過四個參數構造了一個,即請求,在中指定了和,傳遞的參數用了和方法來轉成字節流,另外指定了請求方式為。運行結果如下通過觀察結果可以發現,我們成功設置了,以及。用于處理重定向。 上一篇文章:Python3網絡爬蟲實戰---19、代理基本原理下一篇文章:Python3網絡爬蟲實戰---21、使用Urllib:處理異常 學習爬蟲,最初的操作便...
摘要:通過本文的學習,可以快速掌握網絡爬蟲基礎,結合實戰練習,寫出一些簡單的爬蟲項目。從技術手段來說,網絡爬蟲有多種實現方案,如。二網絡爬蟲技術基礎在本次課中,將使用技術手段進行項目的編寫。 摘要:本文詳細講解了python網絡爬蟲,并介紹抓包分析等技術,實戰訓練三個網絡爬蟲案例,并簡單補充了常見的反爬策略與反爬攻克手段。通過本文的學習,可以快速掌握網絡爬蟲基礎,結合實戰練習,寫出一些簡單的...
摘要:這就是我們第一個核心函數代碼,后面還有很多個喔明天待續中級玩家淘寶天貓商品搜索爬蟲自動化工具第二篇等不及,請武裝 查看·Github 使用Golang重構PC版本搜索框:https://github.com/hunterhug/... 一、前言 大家好,今天我要來講講一個比較實用的爬蟲工具,抓取淘寶的關鍵字商品信息,即是: showImg(https://segmentfault.co...
摘要:內存池機制提供了對內存的垃圾收集機制,但是它將不用的內存放到內存池而不是返回給操作系統。為了加速的執行效率,引入了一個內存池機制,用于管理對小塊內存的申請和釋放。 注:答案一般在網上都能夠找到。1.對if __name__ == main的理解陳述2.python是如何進行內存管理的?3.請寫出一段Python代碼實現刪除一個list里面的重復元素4.Python里面如何拷貝一個對象?...
閱讀 2841·2021-11-25 09:43
閱讀 2488·2021-10-09 09:44
閱讀 2805·2021-09-22 15:49
閱讀 2578·2021-09-01 11:43
閱讀 2548·2019-08-30 14:16
閱讀 469·2019-08-29 17:24
閱讀 3026·2019-08-29 14:00
閱讀 1389·2019-08-29 13:05