当前位置: 首页 > news >正文

厦门市建设局网站规划标准苏州工业园区疾病防治中心

厦门市建设局网站规划标准,苏州工业园区疾病防治中心,怎么做二维码微信扫后直到网站,如何快速自己做网站scrapy下载中间件实现动态与固定UserAgent 前言关卡#xff1a;实现动态切换User-Agentscrapy设置User-Agent方式梳理User-Agent生效梳理为何选择在下载中间件中实现自定义User-Agent下载中间件 结束 前言 请求头User-Agent是比较常规的反爬手段#xff0c;不同站点对其检测… scrapy下载中间件实现动态与固定UserAgent 前言关卡实现动态切换User-Agentscrapy设置User-Agent方式梳理User-Agent生效梳理为何选择在下载中间件中实现自定义User-Agent下载中间件 结束 前言 请求头User-Agent是比较常规的反爬手段不同站点对其检测机制各异有的是检测是否是合规的浏览器User-Agent有的是在这基础上检测使用次数与频率更有甚者是跟ip和cookie绑定在一起检测这就要求我们能够动态去切换User-Agent随机or判定切换。 关卡实现动态切换User-Agent scrapy设置User-Agent方式梳理 这里整理一下笔者已知的scrapy设置User-Agent的方式: setting配置文件中设置DEFAULT_REQUEST_HEADERS 生成requests请求时设置请求头 setting配置文件中设置USER_AGENT 我们在源码看一下USER_AGENT的默认值 scrapy是有自带的USER_AGENT中间件的而USER_AGENT就是跟它一起配合生效的这个中间件默认也是开启的。所以大家注意了如果我们直接使用scrapy自带的USER_AGENT机制是很容易被是被为爬虫的 自定义User-Agent下载中间件这种方式其实跟方式3是一样的逻辑 User-Agent生效梳理 我们来调试一下方式1、方式2和方式3看看三种方式同时设置时最终是哪个方式生效 如下图按顺序分别为三种方式设置好User-Agent 如下图在发起请求生成request队列前方式1设置成功 如下图生成request队列后经过下载中间件可以看到方式2覆盖了方式1 我们仔细看下中间件的代码特别是process_request这个具体实现方法。 在此之前先了解一下setdefault这个方法 setdefault是Python中字典的一个方法 它用于在字典中查找指定键 如果键存在 则返回对应的值 如果键不存在则在字典中添加该键并将其值设置为指定的默认值 由于request.headers的User-Agent有值且是2所以经过下载中间件后它还是2 综上我们可以得到结论 方式1、方式2和方式3共存时结果会取方式2只存在方式1、方式2时结果会取方式2只存在方式1、方式3时结果会取方式1方式3要生效必须只有它这种方式 为何选择在下载中间件中实现 首先要说明一下并非一定要在中间件中才能实现User-Agent动态切换也可以在脚本开发中对每次生成的request请求时动态设置User-Agent请求头但这种方式在笔者看来是不符合python之美的功能未解耦而不够灵活每个脚本都要单独实现既繁琐又提高学习成本。 自定义User-Agent下载中间件 既然选择自定义中间件那我们就可以随便玩了 首先思考一下根据需求整理出设计方案 动态随机生成User-Agent切换控制是否动态生成全局需要适配不同场景固定、动态、切换 通过上面的思考在一个全局改动的位置要适配各式各样的脚本应用场景就需要引入全局控制参数来实现点对点应用下面是笔者的想法 在request.meta中增加 auto_change_uachange_ua_ua三个参数来实现 auto_change_ua是自动切换每次request都会切换User-Agent change_ua是一个切换当前request会切换User-Agent _ua是固定存储不切换时一直使用它 同时准备User-Agent列表用于随机生成大致样式如下 def get_random_ua(self):Return a ua if possiblereturn random.choice(self.ua_list)def process_request(self, request, spider):meta request.metaua Noneif meta.get(auto_change_ua) or meta.get(change_ua, None):ua self.get_random_ua()elif meta.get(_ua, None):ua meta[_ua]elif not request.headers.get(User-Agent, None):ua self.get_random_ua()if ua:request.headers[User-Agent] uadef process_response(self, request, response, spider):request.meta[_ua] request.headers[User-Agent]if change_ua in request.meta:del request.meta[change_ua]if auto_change_ua in request.meta:request.meta[change_ua] Truereturn response开发好后需要在setting的DOWNLOADER_MIDDLEWARES配置才能生效同时记得把原生的UserAgentMiddleware设置为None不然它还是会开启的。 结束 这个关卡的设计方案是笔者根据自己业务场景实现的大家如果有同样的需求需要结合自己的业务场景来思考、设计与实现。 好了分享就到这了有啥错误的地方请指正~
http://www.pierceye.com/news/92540/

相关文章:

  • 个人网站 备案 类型小红书笔记推广
  • 门户网站怎么创建网页制作步骤php
  • 六师五家渠市建设局网站wordpress 定时发布插件
  • 深圳外贸网站外贸网站建设安阳网站建设服务
  • wdcp 网站建设做民宿推广都有哪些网站
  • 常见的网站开发环境网站建设的结构
  • 贵阳网站推广优化公司做网站的公司搞什么活动
  • 安徽平台网站建设制作坪山网站设计的公司
  • 如何做挂qq的网站2017网站建设
  • wordpress语言切换网站保定广告设计公司
  • 做网站需要走公司吗运行一个网站要多少钱
  • 怎样可以免费做网站wap网站软件
  • 织梦手机网站免费模板漳州城乡建设局网站
  • 厦门建设网站的公司php除了写网站吗
  • 如何做全网影视网站居然之家装修公司怎么样
  • 佛山网站建设公司哪家最好万能软文范例800字
  • 网站排名优化如何做wordpress 免费版广告
  • 拓客网站建设建易网官网
  • 网站目录链接怎么做的建网站pc版 (报价)
  • 北京网站制作业务如何开展做网站海报
  • 网站的设计方法有哪些互动网络游戏公司网站建设
  • 公司网站开发制作公司国内重大新闻2022
  • 搜索引擎排名网站北京到广州快递要几天
  • 制作网站怎么制作html网站 下载
  • 深圳网络营销网站设计做个网站哪里可以做
  • 九牛科技网站开发微信营销小型网站建设步骤
  • 分类信息系统网站模板口碑好的网站建设多少钱
  • 米粒网站建设网站开发项目费用预算
  • 12380网站建设的意见建议公司网站维护和更新属于哪个部门
  • 公众号做微网站吗做国外网站的站长