七 web爬蟲講解2—urllib庫爬蟲—狀態嗎—異常處理—瀏覽器偽裝技術、設置用戶代理...

如果爬蟲沒有異常處理,那么爬行中一旦出現錯誤,程序將崩潰停止工作,有異常處理即使出現錯誤也能繼續執行下去

?

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.errortry:                                    #嘗試執行里面的內容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)
復制代碼

?

這樣爬蟲會隨機調用,用戶代理,也就是隨機報頭,保證每次報頭信息不一樣

轉載于:https://www.cnblogs.com/meng-wei-zhi/p/8182538.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252581.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252581.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252581.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

DVI和HDMI中的TMDS接口協議

TMDS(Transition Minimized Differential signal),即過渡調制差分信號,也被稱為最小化傳輸差分信號,是指通過異或及異或非等邏輯算法將原始信號數據轉換成10位,前8為數據由原始信號經運算后獲得&#xff0c…

君子眼中皆好人

從前有個國王,在晚年時思量 著:“我有兩個兒子,我應該把王位傳給哪個兒子來統治這個國家呢?”國王決定考驗一下他的兩位王子,哪位最是忠義仁厚,愛護老百姓的明君。國王叫來長子, 對他說&#xf…

GS使用HTTPS登錄的設置過程

1. Windows 增加角色服務 服務器配置管理器, 添加角色服務 增加角色功能里面有: 證書頒發機構 證書頒發機構 web注冊 2. AD CS配置 主要是next操作 獨立ca 根證書 等 3. inetmgr申請證書 在機器名的一層及上面申請證書 保存證書信息 用來使用CA機構進行簽…

TMDS的信號通道

1 TMDS的信號通道: 1個HDMI包括3個TMDS數據通道和1個TMDS時鐘通道。 . 每一個TMDS時鐘周期內,TMDS數據通道上會發送一個10位的字符信息; . 每個TMDS時鐘周期內,編碼器將2位的控制數據、4位的報數據或者8位的視頻數據采取不同 …

[luoguP2774] 方格取數問題(最大點權獨立集)

傳送門 引入兩個概念: 最小點權覆蓋集:滿足每一條邊的兩個端點至少選一個的最小權點集。 最大點權獨立集:滿足每一條邊的兩個端點最多選一個的最大權點集。 現在對網格染色,使得相鄰兩點顏色不同,之后把兩個顏色的點分…

docker入門之容器網絡

docker入門之容器網絡首發:arppinging.com一、網絡命名空間1)IP命令2)實例二、網絡模型三、容器中常見的網絡操作1)指定網絡模式2)指定容器的dns地址和hosts解析四、網橋配置一、網絡命名空間1)IP命令查看i…

光譜分布、光譜輻射通量密度與不同時間段分布光譜(圖示)

1、光譜分布圖 2 太陽輻射能量圖 3、不同時間段的太陽分布光譜圖 4、不同波長的光的能量分布主要區域 5、不同波段的使用場景

$.ajax()方法詳解

相關鏈接:http://blog.csdn.net/denghejing/article/details/41087581轉載于:https://www.cnblogs.com/Steven5007/p/8191275.html

【從零開始】Python字符串的操作方法

1. 字符串長度 #strlen(str)       # 字符串長度函數名str apples    # 把字符串 "apples" 賦值給變量 strprint (len(str))      # 打印字符串的長度 2. 查找字符 #strchr(str1,str2)      # 查找字符函數名str1 apples      …

SQL工廠法

表結構: exeno caption params sqlcommand tablename 201 登錄 loginname ftsring(20) select * from user where loginname:loginname user //autho…

基于深度學習和傳統算法的人體姿態估計,技術細節都講清楚了

計算機視覺的一大研究熱點是人體姿態估計,還有很多問題急需解決,比如遮擋,交互等等。在最近的CVPR2020里邊也有很多這方面的工作。本文站長主要是想談談基于深度學習的實時多人姿態估計。 人體姿態估計要干嘛? 關于人類活動規律的…

一些linux知識和http知識

一些linux知識和http知識 1 yum安裝比源碼編譯安裝 有的模塊不能自定義安裝 只能安裝默認的模塊進行安裝 2 關于php的fastcgi 如果使用fastcgi 那么需要啟動服務 如果不使用fastcgi 那么不需要啟動這個服務 3 一個完整的HTTP解析路徑 用戶瀏覽器比如訪問www.123.com/index.…

楊浦區阜盛農民工子弟小學見聞

天氣有些陰沉,起了個大早,一個小時奔波后來到了這里…… 大門口: 校領導: 有些破舊的校舍和陰沉的天空下祖國的希望: 同上,希望…… 期待的目光: 頑皮的笑臉,排著隊也要調皮&#xf…

《構建之法》7

十五章講的是穩定和發布階段。軟件生命周期的最后階段往往是最考驗團隊的。從代碼完成到最終發布軟件,需要經歷:完成代碼、集成測試、Bug修復、Alpha發布、DCR Bug修復、Beta發布、外部測試、RTO等。軟件團隊的各個角色代表,組成會診小組。對…

人體姿態估計算法之open pose

一,openpose是一種自底向上的算法: OpenPose人體姿態識別項目是美國卡耐基梅隆大學(CMU)基于卷積神經網絡和監督學習并以Caffe為框架開發的開源庫。可以實現人體動作、面部表情、手指運動等姿態估計。適用于單人和多人&am…

python練習5

import re from datetime import datetime, timezone, timedeltadef to_timestamp(dt_str, tz_str):# 時間dt_now datetime.strptime(dt_str, %Y-%m-%d %H:%M:%S)#時區tz_num int(re.match(\w{3}([|-]\d):00,tz_str).groups()[0])tz_utc timezone(timedelta(hours tz_num))…

搶火車票這個事吧,其實我也能做!(python黑科技)

2019獨角獸企業重金招聘Python工程師標準>>> 又是一年,馬上就要回家過年了,還沒有買到票的小伙伴們是否已經像熱鍋上的螞蟻了無腦的開始找黃牛了? 俗話說的好,求人不如求自己,搶票這玩意,其實我覺得我也可…

用 Python+openpose 實現抖音尬舞機

游戲開始后,隨著音樂會給出不同的動作提示,用戶按照提示擺出正確動作即可得分。援引官方說法,“尬舞機”主要應用了今日頭條 AI Lab 自主開發的“人體關鍵點檢測技術”,依靠這項技術,抖音能夠檢測到圖像中所包含人體的…

PHP獲取中文字符拼音首字母

在項目中遇到需要把游戲進行字母排序,于是百度到一個格式化的首字母的方法。 /*** name php獲取中文字符拼音首字母* param $str* return null|string*/public function getFirstCharter($str){if (empty($str)) {return ;}$fchar ord($str{0});if ($fchar > or…

Array類型

一、轉換方法 toString() 調用數組的toString()方法會返回由數組中每個值的字符串形式拼接而成的一個以逗號分割的字符串 valueOf() 返回的還是數組 實際上,為了創建這個字符串會調用數組每一項的toString()方法 二、棧方法 push() pop() 只發生在棧的頂部 三…