403 python3 urllib.request的错误

时间:2017-07-01 13:41:01

标签: python-3.5 urlopen

我试图访问一个网站,看看我是否可以使用urllib.import的urlopen模块读取其内容,但后来我看到我有403禁止错误。

但是当我尝试通过网络浏览器打开链接时,它会打开。在我看来这是网站的某种安全可能防止恶意攻击。

我想知道通过网络浏览器访问我的内容的机制是什么,但是阻止通过我正在运行的脚本访问?

{代码}

 >>> from urllib.request import urlopen
 >>> html= urlopen("http://www.english-for-students.com/A-Wise-Counting.html")
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "/usr/lib/python3.5/urllib/request.py", line 163, in urlopen
     return opener.open(url, data, timeout)
   File "/usr/lib/python3.5/urllib/request.py", line 472, in open
     response = meth(req, response)
   File "/usr/lib/python3.5/urllib/request.py", line 582, in http_response
     'http', request, response, code, msg, hdrs)
   File "/usr/lib/python3.5/urllib/request.py", line 510, in error
     return self._call_chain(*args)
   File "/usr/lib/python3.5/urllib/request.py", line 444, in _call_chain
     result = func(*args)
   File "/usr/lib/python3.5/urllib/request.py", line 590, in      http_error_default
     raise HTTPError(req.full_url, code, msg, hdrs, fp)
 urllib.error.HTTPError: HTTP Error 403: Forbidden
 >>>

{代码}

2 个答案:

答案 0 :(得分:1)

一种可能的方法是检查兼容的浏览器用户代理的标头。可以在此处找到更多信息:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

答案 1 :(得分:1)

检查标题为&#34; Headers&#34;在this link。从页面

  

有些网站不喜欢被节目浏览或发送不同的内容   版本到不同的浏览器。默认情况下,urllib标识   本身就是Python-urllib / x.y(其中x和y是主要和次要的   Python版本的版本号,例如Python-urllib / 2.5),其中   可能会混淆网站,或只是显然不工作。浏览器的方式   通过User-Agent头标识自己[3]。当你   创建一个Request对象,您可以在其中传递标题字典。