当前位置: 首页 > 后端技术 > Python

26.使用downloadmiddleware中间件全局随机替换user-agent浏览器用户代理

时间:2023-03-26 17:18:31 Python

【百度云搜索,搜各种资料:http://www.lqkweb.com】【搜网盘,搜各种资料:http://www.swpan.cn]下载中间件介绍中间件是一个可以对接请求/响应处理的框架。这是一个非常轻量级的低级系统,可以改变Scrapy的请求和响应。即Requests请求和Response响应之间的中间件可以全局修改Requests请求和Response响应到UserAgentMiddleware()方法。默认的中间件源码是downloadmiddleware中useragent.py下的UserAgentMiddleware()方法。我们使用的默认中间件从源码可以看出,Requests请求时默认的User-Agent是Scrapy。这很容易被网站识别并拦截爬虫。我们可以修改默认的中间件UserAgentMiddleware()来随机替换Requests请求头信息的User-Agent浏览器用户代理。第一步,在settings.py配置文件中,打开中间件注册DOWNLOADER_MIDDLEWARES={}设置默认的UserAgentMiddleware默认为None,或者设置为最大最后执行,这样我们自定义的中间件就可以修改默认的user_agent首先执行settings.py配置文件#启用或禁用下载器中间件#参见http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.htmlDOWNLOADER_MIDDLEWARES={#启用注册中间件'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware':None,#设置默认UserAgentMiddleware为None}第二步安装浏览器用户代理模块fake-useragent0.1.7fake-useragent是专门用于爬虫伪装浏览器User-Agent请求头的模块.该模块在线维护各种浏览器的各种版本库,提供我们使用的各种在线浏览器的信息:http://fake-useragent.herokua...0.1.7版本,fake-useragent会随机调用这里浏览器代理首先安装这个模块pipinstallfake-useragent使用说明:#!/usr/bin/envpython#-*-coding:utf8-*-fromfake_useragentimportUserAgent#导入浏览器代理模块ua=UserAgent()#ExampleBrowserproxyclassua.ie#随机获取IE类型代理#Mozilla/5.0(Windows;U;MSIE9.0;WindowsNT9.0;en-US);#Mozilla/5.0(兼容;MSIE10.0;Macintosh;IntelMacOSX10_7_3;Trident/6.0)'ua['InternetExplorer']#Mozilla/5.0(兼容;MSIE8.0;WindowsNT6.1;Trident/4.0;GTB7。4;InfoPath.2;SV1;.NETCLR3.3.69573;WOW64;en-US)ua.opera#Opera/9.80(X11;Linuxi686;U;ru)Presto/2.8.131版本/11.11ua.chrome#Mozilla/5.0(WindowsNT6.1)AppleWebKit/537.2(KHTML,likeGecko)Chrome/22.0.1216.0Safari/537.2'ua.google#Mozilla/5.0(Macintosh;IntelMacOSX10_7_4)AppleWebKit/537.13(KHTML,likeGeckoecko)Chrome/24.0.1290.1Safari/537.13ua['googlechrome']#Mozilla/5.0(X11;CrOSi6862268.111.0)AppleWebKit/536.11(KHTML,likeGecko)Chrome/20.0.1132.57Safari1/536ref.#Mozilla/5.0(WindowsNT6.2;Win64;x64;rv:16.0.1)Gecko/20121011Firefox/16.0.1ua.ff#Mozilla/5.0(X11;Ubuntu;Linuxi686;rv:15.0)Gecko/20100101Firefox/15.0.1ua.safari#Mozilla/5.0(iPad;CPUOS6_0likeMacOSX)AppleWebKit/536.26(KHTML,likeGecko)Version/6.0Mobile/10A5355dSafari/8536.25#andthebestone,randomserusviarealworldbrowstatisticua.random#随机获取各种浏览器类型的proxy,更多的使用https://pypi.python.org/pypi/...第三步自定义中间件全局随机替换Requests请求头信息的User-在middlewares.py文件中代理浏览器用户代理,自定义中间件#-*-编码:utf-8-*-#在这里定义你的蜘蛛中间件的模型##请参阅文档:#http://doc.scrapy.org/en/latest/topics/spider-middleware.htmlfromscrapyimportsignalsfromfake_useragentimportUserAgent#导入浏览器用户代理模块类RequestSuserager(Object):##随机替换user-agent浏览器用户代理DEF__init__(Crawler):Super(requestsuseragdware,Self)。基于类的父类,__snit__方法中的对象包装值seld.ua=userRagent()#实例化浏览器用户代理模块类seld.ua_type=crawler.Settings.get('random_ua_type')##获取配置的浏览器类型settings.py配置文件中的RANDOM_UA_TYPE。如果不是,默认是随机的,各种浏览器类型随机获取@classmethod我们接收当前的类名deffrom_crawler(CLS,Crawler):#重载from_crawler方法返回类(crawler)#返回爬虫爬虫类defprocess_request(seld,request,spider):##自定义函数,返回浏览器代理对象中指定类型的浏览器信息returngetattr(self.ua,self.ua_type)request.headers.setdefault('User-Agent',get_ua())#浏览器代理信息添加到Requests请求步骤4,将我们自定义的中间件注册到settings.py配置文件中,注意在DOWNLOADER_MIDDLEWARES中将默认的UserAgentMiddleware中间件设置为None,这样我们的自定义中间件才会生效#启用或禁用下载器中间件#见http:///scrapy.readthedocs.org/en/latest/topics/downloader-middleware.htmlDOWNLOADER_MIDDLEWARES={#打开注册中间件'adc.middlewares.RequestsUserAgentmiddware':543,wareload.scrapy.downloads.UserAgentMiddleware':None,#设置默认UserAgentMiddlewaretoNone}我们可以中断调试看看它是否有效