我正在尝试使用 Python 下载一些内容urllib.request
。以下命令会产生异常:
import urllib.request
print(urllib.request.urlopen("https://fpgroup.foreignpolicy.com/foreign-policy-releases-mayjune-spy-issue/").code)
result:
...
HTTPError: HTTP Error 403: Forbidden
如果我使用 firefox 或 links(命令行浏览器),我会得到内容和状态代码 200。如果我使用 lynx,很奇怪,我也会得到 403。
我希望所有方法都能起作用
- 一样的方法
- 成功地
为什么事实并非如此?
该网站很可能阻止人们抓取其网站。您可以通过包含标头信息和其他内容来在基本级别上欺骗他们。请参阅此处了解更多信息。
引用自:https://docs.python.org/3/howto/urllib2.html#headers https://docs.python.org/3/howto/urllib2.html#headers
import urllib.parse
import urllib.request
url = 'http://www.someserver.com/cgi-bin/register.cgi'
user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
values = {'name' : 'Michael Foord',
'location' : 'Northampton',
'language' : 'Python' }
headers = { 'User-Agent' : user_agent }
data = urllib.parse.urlencode(values)
data = data.encode('ascii')
req = urllib.request.Request(url, data, headers)
with urllib.request.urlopen(req) as response:
the_page = response.read()
人们不希望脚本抓取他们的网站的原因有很多。这需要他们的带宽。他们不希望人们通过制作抓取机器人来受益(从金钱角度)。也许他们不希望您复制他们的网站信息。您也可以将其视为一本书。作者希望人们阅读他们的书,但也许他们中的一些人不希望机器人扫描他们的书,创建副本,或者机器人可能会总结它。
评论中问题的第二部分在这里回答起来过于模糊和宽泛,因为有太多固执己见的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)