#python #python-3.x #web-scraping #scrapy
#python #python-3.x #веб-очистка #scrapy
Вопрос:
я новичок в использовании scrapy, и у меня есть сомнения по поводу очищенных URL-адресов.
Я пытаюсь очистить сайт, чтобы каждая страница, на которую вы переходите, перенаправлялась на домашнюю страницу, при нажатии на баннер вы могли получить доступ к другим страницам. Я пытался использовать
meta={'dont_redirect': True, 'handle_httpstatus_list': [301, 302]
чтобы избежать перенаправления, но очищенный от URL-адреса все еще был неправильным. Итак, я подумал, что проблема в файлах cookie, и чтобы проверить это, я жестко запрограммировал файлы cookie, чтобы они были такими же, как в браузере при входе на сайт, и теперь это не перенаправление, и мне даже не нужно указывать ‘dont_redirect’ в meta, но когда я смотрю на отладчик, он все еще очищает домашнюю страницу.
на данный момент код выглядит следующим образом:
import scrapy
class MatchOpeningSpider(scrapy.Spider):
name = 'bet_365_match_opening'
start_urls = [
'https://www.bet365.com/#/AC/B1/C1/D13/E38078994/F2/'
]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, cookies={
'pstk': '04761A56B7A54D9BB3948A093FB9F440000003',
'rmbs': 3,
'aps03': 'lng=22amp;tzi=34amp;oty=2amp;ct=28amp;cg=1amp;cst=0amp;hd=Namp;cf=N',
'session': 'processform=0amp;fms=1'
})
def parse(self, response):
games = response.css('div.sl-CouponParticipantWithBookCloses_Name').extract()
yield {'games': games}
при отладке вы можете видеть, что просмотренный URL-адрес правильный, но извлеченный из — это домашняя страница
2019-04-21 12:02:37 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.bet365.com/#/AC/B1/C1/D13/E38078994/F2/> (referer: None)
2019-04-21 12:02:37 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.bet365.com/>
Что я делаю не так?
Спасибо за помощь!!!
Ответ №1:
В вашем start_url есть идентификатор фрагмента (острый знак: #) в середине, контекст после него не будет передаваться браузером
Это означает, что нужные вам данные могут содержаться не в HTTP-ответе start_url, а в некоторых других вызовах Ajax после этого основного запроса документа и рендеринга на стороне клиента
Мои предложения:
-
Сначала используйте инструменты разработки браузера, или оболочку Scrapy, или даже инструменты CURL, чтобы убедиться, что необходимый вам контент существует в http-ответе start_url. Или вы удаляете неправильный URL
-
Сделайте заголовки http, файлы cookie, полностью такими же, как в реальном браузере. Scrapy обрабатывает перенаправление 3xx и изменения файлов cookie для вас, но вам нужно будет найти и представить фактический путь посещения в вашей программе spider
-
Если данные отображаются на стороне клиента, и вы устали от этого, попробуйте spider на основе Selenium, чтобы использовать браузер с движком JS для решения этих проблем