Craigslist 403 Блокировка urlopen, но НЕ request.get

Недавно 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)

Любая помощь приветствуется. Это похоже на новую проблему, поскольку ни одно из решений, предложенных в предыдущих сообщениях, не помогло.

Запустите оба через прокси, например Postman, и посмотрите, какая разница между запросами, должна быть какая-то разница

JeffUK 14.12.2020 21:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
612
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я столкнулся с той же проблемой, что и у вас. Я смог решить эту проблему с помощью кого-то из команды Scrapy.

Проблема, вероятно, будет решена, если вы войдете в свой файл settings.py и добавите следующее:

DOWNLOADER_CLIENT_TLS_METHOD = "TLSv1.2"

Затем снова запустите сканер, и на этот раз он должен работать. Я до сих пор не знаю, почему это решает проблему, поэтому, если кто-то еще знает почему, было бы здорово, если бы они могли пролить свет на это.

Вы также можете обратиться к этой проблеме Github, которую я сделал, чтобы отслеживать дальнейшие ответы команды Scrapy по этой проблеме.

Другие вопросы по теме