Python 如何知道scrapy spider中当前使用的是哪个用户代理?

Python 如何知道scrapy spider中当前使用的是哪个用户代理?,python,scrapy,attributes,Python,Scrapy,Attributes,我想知道如何访问当前使用的用户代理。 例如,在这个过程中,我想在终端中print():当前的用户代理是Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.1(KHTML,像Gecko)Chrome/22.0.1207.1 Safari/537.1,或者在日志文件中。我怎样才能用scrapy访问它 版本:Scrapy 1.5.2如果用户代理设置如下 可以使用: settings.py: ... USER_AGENT_LIST = [ 'Mozilla/

我想知道如何访问当前使用的用户代理。 例如,在这个过程中,我想在终端中
print()
当前的用户代理是Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.1(KHTML,像Gecko)Chrome/22.0.1207.1 Safari/537.1
,或者在日志文件中。我怎样才能用scrapy访问它


版本:Scrapy 1.5.2

如果用户代理设置如下

可以使用:

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,
...
}
...
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']))
middleware.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,
...
}
...
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']))
无论使用与否,您都可以将其显示在spider类的任何方法中,如下所示:

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
哪些更改。

您是如何提出请求的?@EdekiOkoh我希望它能回答您的问题。我在
settings.py
文件中将一个用户代理列表设置为
user\u agent\u list=[…]
并且我仍然在
settings.py
中定义了中间件的功能:
DOWNLOADER\u middleware={'chevauu p\u t.middleware.RandomUserAgentMiddleware':400,}
。然后在
middleware.py
文件中:
类RandomUserAgentMiddleware(object):def process\u request(self,request,spider):ua=random.choice(settings.get('USER\u AGENT\u LIST'))if-ua:request.headers.setdefault('USER-AGENT',ua)
在这里可以发布脚本吗?我也有类似的想法,但很难看出你在做什么。非常确定,您所需要的只是在设置中添加一条打印语句。py@EdekiOkoh这似乎很愚蠢,但我认为解决方案实际上是这样的:
#log.msg('>>>>UA%s'%request.headers)
,如果您删除log.msg('>>>>UA%s'%request.headers)行中的注释,该方法应该有效。但是你需要确保你已经登录到你的主文件中