天天看點

urllib.error.HTTPError: HTTP Error 403: 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:\Python32\lib\urllib\request.py", line 475, in open  

    response = meth(req, response)  

  File "D:\Python32\lib\urllib\request.py", line 587, in http_response  

    'http', request, response, code, msg, hdrs)  

  File "D:\Python32\lib\urllib\request.py", line 513, in error  

    return self._call_chain(*args)  

  File "D:\Python32\lib\urllib\request.py", line 447, in _call_chain  

    result = func(*args)  

  File "D:\Python32\lib\urllib\request.py", line 595, in http_error_default  

    raise HTTPError(req.full_url, code, msg, hdrs, fp)  

urllib.error.HTTPError: HTTP Error 403: Forbidden</span>  

分析:

有些網站為了防止這種非正常的通路,會驗證請求資訊中的UserAgent(它的資訊包括硬體平台、系統軟體、應用軟體和使用者個人偏好),如果UserAgent存在異常或者是不存在,那麼這次請求将會被拒絕(如上錯誤資訊所示)

是以可以嘗試在請求中加入UserAgent的資訊

方案:

#如果不加上下面的這行出現會出現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() 替換成上面的代碼後,對于出現問題的頁面就可以就正常通路