Python 3.x 中"HTTP Error 403: Forbidden"问题的解决方案

标签: Python
2302人阅读 评论(0) 收藏 举报
分类:

转载自 http://www.2cto.com/kf/201309/242273.html


问题:

urllib.request.urlopen() 方法经常会被用来打开一个网页的源代码,然后会去分析这个页面源代码,但是对于有的网站使用这种方法时会抛出"HTTP Error 403: Forbidden"异常。


例如: 执行下面的语句时 

urllib.request.urlopen("http://blog.csdn.net/eric_sunah/article/details/11099295")


会出现以下异常:

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


分析:

之所以出现上面的异常,是因为如果用 urllib.request.urlopen() 方式打开一个URL,服务器端只会收到一个单纯的对于该页面访问的请求,但是服务器并不知道发送这个请求使用的浏览器,操作系统,硬件平台等信息,而缺失这些信息的请求往往都是非正常的访问,例如爬虫。


有些网站为了防止这种非正常的访问,会验证请求信息中的UserAgent(它的信息包括硬件平台、系统软件、应用软件和用户个人偏好),如果UserAgent存在异常或者是不存在,那么这次请求将会被拒绝(如上错误信息所示)

所以可以尝试在请求中加入UserAgent的信息。


方案:

对于Python 3.x来说,在请求中添加UserAgent的信息非常简单,代码如下:

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() 

谷歌浏览器中如何查看headers信息

http://jingyan.baidu.com/article/27fa73268ff4e146f8271f33.html

查看评论

python安装easyinstall/pip出错

在Windows中装了python3.6,自然还要装pip。按度娘的提供的方法先下载easyinstall,然后在CMD下输入: python ez_setup.py 结果报错 。。。。。。 url...
  • i8088
  • i8088
  • 2017-11-08 22:33:29
  • 2616

python安装pip

在Windows中装了python3.6,自然还要装pip。按度娘的提供的方法先下载easyinstall,然后在CMD下输入: python ez_setup.py 结果报错 。。...
  • jimmy123321
  • jimmy123321
  • 2018-01-09 20:40:47
  • 155

urllib.error.HTTPError: HTTP Error 403: Forbidden

urllib.error.HTTPError: HTTP Error 403:Forbidden 解决403错误:需要通过添加头文件的方式 有错误: import urllib.request ...
  • framic
  • framic
  • 2016-11-26 16:38:49
  • 1181

urllib2:URLError与HTTPError

urllib2 的异常错误处理 在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误。 这里主要说的...
  • sinat_35360663
  • sinat_35360663
  • 2017-11-06 11:01:37
  • 2514

python安装提示No module named setuptools,wget提示ERROR 403: SSL is required

http://www.04007.cn/article/451.html  在下载安装一个python工具时提示报错No module named setuptools [root@k...
  • jiaoshengha
  • jiaoshengha
  • 2018-02-27 09:59:45
  • 785

详解:Python2中的urllib、urllib2与Python3中的urllib以及第三方模块requests

先说说Python2中的url与urllib2(参考此处): urllib和urllib2都是接受URL请求的相关模块,但是提供了不同的功能。两个最显著的不同如下: 1、urllib2可以接受一...
  • drdairen
  • drdairen
  • 2016-04-14 10:30:07
  • 46772

【Django】WIN10安装MySQL-python时遇到403 SSL is required

先说明下我是在从官网下载的包里面进行操作的 运行python setup.py install后:   刚开始看到命令行中的提示时我还以为是因为没配置IIS的问题,因为我WIN10是新装的英文版,...
  • u013451157
  • u013451157
  • 2017-11-03 00:45:58
  • 5365

python urllib2 模块异常处理方法

urllib2模块中最重要的函数是urlopen()函数,用于获取URLs资源(Uniform Resorce Locators)。urlopen函数不仅可以用于简单的情况,还可以进行复杂情况下的资源...
  • isoleo
  • isoleo
  • 2014-06-17 10:00:52
  • 6419

python内置的urllib模块不支持https协议的解决办法

Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常。寻根朔源发现是python内...
  • zyz511919766
  • zyz511919766
  • 2014-05-05 14:46:38
  • 37626

win7 python3 解决 (SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_s

使用 python3 采集 HTTPS的网站,报错提示:win7 python3 (SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate ...
  • default7
  • default7
  • 2017-09-07 10:43:39
  • 962
    个人资料
    持之以恒
    等级:
    访问量: 8万+
    积分: 1119
    排名: 4万+
    个人主页
    最新评论