我试图访问一个网站,看看我是否可以使用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
>>>
{代码}
答案 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对象,您可以在其中传递标题字典。