python - 如何知道scrapy蜘蛛当前使用的是哪个用户代理?
问题描述
我想知道如何访问当前使用的用户代理。例如我想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访问它?
版本: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,
...
}
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
。
推荐阅读
- python - Jupyter notebook & 'git' 未被识别为内部或外部命令、可运行程序或批处理文件
- jenkins - 作业导入插件不导入文件夹
- javascript - 为什么标签中包含 Angular 文件?
- python - 如何在数据框中查找和分组相似的术语以求和它们的值?
- excel - VBA选择单元格并将其复制到txt文件中
- python-3.x - M2Crypto.SMIME.PKCS7_Error:标签错误
- javascript - php数组不使用javascript删除行
- c# - JSON 到 MVC 控制器
- arrays - 如何在用户窗体 VBA 中从数组中删除元素
- javascript - 移动设备上奇怪的 iframe 缩放