Как узнать, какой пользовательский агент в настоящее время используется в Scrapy Spider? - PullRequest
1 голос
/ 12 апреля 2019

Я хотел бы знать, как получить доступ к тому, какой пользовательский агент используется в настоящее время. Например, я хочу, чтобы print() в терминале во время процесса: the current user agent is Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1 или в файле журнала. Как я могу получить к нему доступ с помощью скрапа?

Версия: Scrapy 1.5.2

1 Ответ

2 голосов
/ 13 апреля 2019

Если пользовательский агент установлен как в этом решении

Можно использовать:

settings.py

...
USER_AGENT_LIST = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',...,
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36 OPR/48.0.2685.52'
]
...
DOWNLOADER_MIDDLEWARES = {
'chevaux_p_t.middlewares.RandomUserAgentMiddleware': 400,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None,
...
}

middlewares.py:

...
class RandomUserAgentMiddleware(object):

    def process_request(self, request, spider):
        ua = random.choice(settings.get('USER_AGENT_LIST'))
        if ua:
            request.headers.setdefault('User-Agent', ua)
            #One can do this to get the current user-agent used
            print("current user-agent:{}".format(request.headers[b'User-Agent']))
            logging.debug("current user-agent:{}".format(request.headers[b'User-Agent']))

Используя это решение или нет, можно заставить его появляться в любом методе вашего класса пауков как:

import logging
class Spider(scrapy.Spider):
    def a_method(self,response):
        print("current user-agent:{}".format(response.request.headers['User-Agent']))
        logging.debug("current user-agent:{}".format(response.request.headers['User-Agent']))

Какие изменения добавлены response.

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