【问题标题】:Craigslist 403 Blocking urlopen but NOT requests.getCraigslist 403 阻止 urlopen 但不阻止 requests.get
【发布时间】:2021-03-25 12:03:54
【问题描述】:

最近 Craigslist.com 开始 403 阻止以下代码。这似乎与标头或 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)

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

【问题讨论】:

  • 通过代理(例如 Postman)运行两者,看看请求之间有什么区别,一定有一些区别

标签: python web-scraping scrapy urllib


【解决方案1】:

我遇到了和你一样的问题。我在 Scrapy 团队的帮助下解决了这个问题。

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

DOWNLOADER_CLIENT_TLS_METHOD = "TLSv1.2"

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

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

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多