gpt4 book ai didi

python - 为什么 urllib.request.urlopen 有时不起作用,但浏览器可以?

转载 作者:行者123 更新时间:2023-11-28 20:38:11 25 4
gpt4 key购买 nike

我正在尝试使用 Python 的 urllib.request 下载一些内容。以下命令会产生异常:

import urllib.request
print(urllib.request.urlopen("https://fpgroup.foreignpolicy.com/foreign-policy-releases-mayjune-spy-issue/").code)

结果:

...
HTTPError: HTTP Error 403: Forbidden

如果我使用 firefox 或链接(命令行浏览器),我会得到内容和状态代码 200。如果我使用 lynx,很奇怪,我也会得到 403。

我希望所有的方法都能奏效

  1. 同样的方式
  2. 成功

为什么不是这样?

最佳答案

很可能该网站正在阻止人们抓取他们的网站。您可以通过包含 header 信息和其他内容来从根本上欺骗他们。有关更多信息,请参见此处。

引自: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()

人们不希望脚本抓取他们的网站的原因有很多。它占用了他们的带宽。他们不希望人们通过制作抓取机器人来获益(金钱方面)。也许他们不希望您复制他们的站点信息。您也可以将其视为一本书。作者希望人们阅读他们的书,但也许他们中的一些人不希望机器人扫描他们的书,创建一个副本,或者机器人可能会总结它。

您在评论中提出的问题的第二部分过于含糊和笼统,无法在这里回答,因为有太多自以为是的答案。

关于python - 为什么 urllib.request.urlopen 有时不起作用,但浏览器可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41469938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com