urllib.error.HTTPError:HTTPError403:Forbidden
問題:
urllib.request.urlopen() 方法經常會被用來開啟一個網頁的原始碼,然後會去分析這個頁面原始碼,但是對於有的網站使用這種方法時會丟擲”HTTP Error 403: Forbidden”異常
例如 執行下面的語句時
[python]
<span style=”font-size:14px;”> urllib.request.urlopen(“http://blog.csdn.net/eric_sunah/article/details/11099295”)</span>
會出現以下異常:
[python]
<span style=”color:#FF0000;”> File “D:Python32liburllib
equest.py”, line 475, in open
equest.py”, line 475, in open
response = meth(req, response)
File “D:Python32liburllib
equest.py”, line 587, in http_response
equest.py”, line 587, in http_response
`http`, request, response, code, msg, hdrs)
File “D:Python32liburllib
equest.py”, line 513, in error
equest.py”, line 513, in error
return self._call_chain(*args)
File “D:Python32liburllib
equest.py”, line 447, in _call_chain
equest.py”, line 447, in _call_chain
result = func(*args)
File “D:Python32liburllib
equest.py”, line 595, in http_error_default
equest.py”, line 595, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden</span>
分析:
之所以出現上面的異常,是因為如果用 urllib.request.urlopen 方式開啟一個URL,伺服器端只會收到一個單純的對於該頁面訪問的請求,但是伺服器並不知道傳送這個請求使用的瀏覽器,作業系統,硬體平臺等資訊,而缺失這些資訊的請求往往都是非正常的訪問,例如爬蟲.
有些網站為了防止這種非正常的訪問,會驗證請求資訊中的UserAgent(它的資訊包括硬體平臺、系統軟體、應用軟體和使用者個人偏好),如果UserAgent存在異常或者是不存在,那麼這次請求將會被拒絕(如上錯誤資訊所示)
所以可以嘗試在請求中加入UserAgent的資訊
方案:
對於Python 3.x來說,在請求中新增UserAgent的資訊非常簡單,程式碼如下
[python]
#如果不加上下面的這行出現會出現urllib2.HTTPError: HTTP Error 403: Forbidden錯誤
#主要是由於該網站禁止爬蟲導致的,可以在請求加上頭資訊,偽裝成瀏覽器訪問User-Agent,具體的資訊可以通過火狐的FireBug外掛查詢
headers = {`User-Agent`:`Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0`}
req = urllib.request.Request(url=chaper_url, headers=headers)
urllib.request.urlopen(req).read()
將urllib.request.urlopen.read() 替換成上面的程式碼後,對於出現問題的頁面就可以就正常訪問
相關文章
- svn access to forBiddenORB
- FreeBSD Transmission 403 ForbiddenORB
- dss nginx 403 forbiddenNginxORB
- sonic 部署,拉取映象 ForbiddenORB
- Heroku 403 Forbidden Procfile 配置未生效ORB
- 解決圖片訪問403 Forbidden問題ORB
- 爬蟲之遇到403 Forbidden,IP被封,怎麼辦?爬蟲ORB
- 005-blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]BloCORBIndexdeleteAPI
- Django Error: [WinError 10013] An attempt was made to access a socket in a way forbidden by its access permissionsDjangoErrorORB
- apache 經常無法訪問目錄列表,顯示 403 forbiddenApacheORB
- 處理SAP HANA Web-Based Development Workbench的403 Forbidden錯誤WebdevORB
- 釋出npm包遇到的報錯: ERR! 403 Forbidden, Are you logged in as the correct userNPMORB
- 如何處理SAP HANA Web-Based Development Workbench的403 Forbidden錯誤WebdevORB
- 【報錯】elasticsearch 報錯blocked by: [FORBIDDEN/12/index read-only / allow delete (api)]ElasticsearchBloCORBIndexdeleteAPI
- 1455G Forbidden Value(資料結構優化dp+啟發式合併)ORB資料結構優化
- 遇到403 Forbidden ,伺服器端查詢後結果是http get查詢字串中包含非法字元ORB伺服器HTTP字串字元