Craigslist 403 блокирует urlopen, но НЕ запросы.get

#python #web-scraping #scrapy #urllib

#python #очистка веб-страниц #scrapy #urllib

Вопрос:

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

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

Комментарии:

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

Ответ №1:

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

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

 DOWNLOADER_CLIENT_TLS_METHOD = "TLSv1.2"
 

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

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