Добавление заголовков в Scrapy Spider - PullRequest
0 голосов
/ 15 февраля 2019

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

Несмотря на разные даты и разные страницы, на которые ссылаются URL-адреса, я получаю одинаковое значение в качестве выходных данных для всехЗапросы.Похоже, что скрипт получает первое полученное значение и присваивает один и тот же вывод всем последующим запросам.

import scrapy

 class QuotesSpider(scrapy.Spider):
    name = 'quotes'
    allowed_domains = ['google.com']
    start_urls = ['https://www.google.com/search?q=Activision&biw=1280&bih=607&source=lnt&tbs=cdr%3A1%2Ccd_min%3A01%2F01%2F2004%2Ccd_max%3A12%2F31%2F2004&tbm=nws',
                  'https://www.google.com/search?q=Activision&biw=1280&bih=607&source=lnt&tbs=cdr%3A1%2Ccd_min%3A01%2F01%2F2005%2Ccd_max%3A12%2F31%2F2005&tbm=nws',
                  'https://www.google.com/search?q=Activision&biw=1280&bih=607&source=lnt&tbs=cdr%3A1%2Ccd_min%3A01%2F01%2F2006%2Ccd_max%3A12%2F31%2F2006&tbm=nws',
    ]

    def parse(self, response):
        item = {
            'search_title': response.css('input#sbhost::attr(value)').get(),
            'results': response.css('#resultStats::text').get(),
            'url': response.url,
        }
        yield item

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

headers = {
    "User-Agent":
        "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36"
}
payload = {'as_epq': 'James Clark', 'tbs':'cdr:1,cd_min:01/01/2015,cd_max:01/01/2015', 'tbm':'nws'}
r = requests.get("https://www.google.com/search", params=payload, headers=headers)

Подход к применению заголовков в Scrapy кажется другим, хотя ,Кто-нибудь знает, как его лучше всего включить в Scrapy, особенно со ссылкой на start_urls, которая содержит несколько URL-адресов одновременно?

1 Ответ

0 голосов
/ 15 февраля 2019

Вам не нужно изменять заголовки здесь.Вам нужно установить пользовательский агент , который Scrapy позволяет вам делать напрямую.

import scrapy

class QuotesSpider(scrapy.Spider):
    # ...
    user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36'
    # ...

Теперь вы получите вывод, подобный:

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