Недавно 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
Когда я запускаю аналогичный блок, используя запросы вместо urlopen, он работает нормально.
import requests
from lxml import html
x=requests.get("https://sd.craigslist.org/search/sss")
tree = html.fromstring(x.content)
print(x.content)
Любая помощь приветствуется. Это похоже на новую проблему, поскольку ни одно из решений, предложенных в предыдущих сообщениях, не помогло.
Я столкнулся с той же проблемой, что и у вас. Я смог решить эту проблему с помощью кого-то из команды Scrapy.
Проблема, вероятно, будет решена, если вы войдете в свой файл settings.py
и добавите следующее:
DOWNLOADER_CLIENT_TLS_METHOD = "TLSv1.2"
Затем снова запустите сканер, и на этот раз он должен работать. Я до сих пор не знаю, почему это решает проблему, поэтому, если кто-то еще знает почему, было бы здорово, если бы они могли пролить свет на это.
Вы также можете обратиться к этой проблеме Github, которую я сделал, чтобы отслеживать дальнейшие ответы команды Scrapy по этой проблеме.
Запустите оба через прокси, например Postman, и посмотрите, какая разница между запросами, должна быть какая-то разница