Python Scrapy - Записки из url не установлены в start_urls - PullRequest
0 голосов
/ 21 апреля 2019

Я новичок в использовании скрапа, и у меня есть сомнения по поводу соскобленных URL.

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

meta={'dont_redirect': True, 'handle_httpstatus_list': [301, 302]

, чтобы избежать перенаправления, но извлеченные из URL-адреса по-прежнему не так.Поэтому я подумал, что проблема заключается в cookie-файлах, и для его проверки у меня есть жесткий код cookie-файлов, которые должны быть такими же, как у браузера при входе на сайт, и теперь он не перенаправляет, и мне даже не нужно ставить 'dont_redirect' вмета, но когда я смотрю отладчик, он все еще чистит домашнюю страницу.

на данный момент код выглядит следующим образом:


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=22&tzi=34&oty=2&ct=28&cg=1&cst=0&hd=N&cf=N',
                'session': 'processform=0&fms=1'
            })

    def parse(self, response):
        games = response.css('div.sl-CouponParticipantWithBookCloses_Name').extract()
        yield {'games': games}

отладка, которую вы видите, просканированная ссылка верна, но Scrapedс домашней страницы

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 Ответ

1 голос
/ 21 апреля 2019

В вашем start_url есть идентификатор фрагмента (резкий знак: #) в середине, контекст после которого не будет продолжен браузером

, которыйозначает, что данные, которые вам нужны, могут быть не в HTTP-ответе start_url , а от некоторых других вызовов Ajax после запроса основного документа и рендеринга на стороне клиента

Мои предложения:

  1. Используйте инструменты разработчика браузера, или Scrapy shell , или даже инструменты CURL, чтобы гарантировать, что вам нужно содержимое существует в http-ответе start_url первый.Или вы выбрасываете неправильный URL-адрес

  2. Делайте http-заголовки, куки-файлы абсолютно такими же, как в реальном браузере.Scrapy обрабатывает переадресацию 3xx и изменения cookie для вас, но вам нужно найти и представить фактический путь посещения в вашей программе-пауке

  3. Если данные отображаются на стороне клиента и выВы устали от этого, попробуйте Селен на основе паука , чтобы использовать браузер с движком JS для решения этих проблем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...