Craigslist 403 阻止 urlopen 但不是 requests.get

Craigslist 403 Blocking urlopen but NOT requests.get

最近Craigslist.com开始403拦截以下代码。这个好像是不管header还是IP。

import requests
from urllib.request import urlopen, Request
from lxml import etree

url = 'https://sd.craigslist.org/search/sss'
parser = etree.HTMLParser()
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}

url_request = Request(url, headers=headers)
                      
webpage = urlopen(url_request,timeout=20).read()

这会输出以下内容: urllib.error.HTTPError: HTTP Error 403: Forbidden

当我 运行 一个类似的块使用 requests 而不是 urlopen 它工作正常。

import requests
from lxml import html
x=requests.get("https://sd.craigslist.org/search/sss")
tree = html.fromstring(x.content)
print(x.content)

感谢任何帮助。这似乎是一个新问题,因为之前帖子中提出的 none 解决方案似乎已经解决。

我 运行 遇到了与您遇到的完全相同的问题。我在 Scrapy 团队的帮助下解决了这个问题。

如果您进入 settings.py 文件并添加以下内容,问题可能会得到解决:

DOWNLOADER_CLIENT_TLS_METHOD = "TLSv1.2"

然后 运行 再次使用您的抓取工具,这次它应该可以工作了。我仍然不知道为什么这能解决问题,所以如果其他人知道为什么,如果他们能对此有所了解就太好了。

您还可以参考我提出的 this Github issues 以跟踪 Scrapy 团队关于该问题的任何进一步回复。