首页 > 其他分享 >【scrapy】随机更换User-Agent中间件

【scrapy】随机更换User-Agent中间件

时间:2024-07-07 20:56:17浏览次数:8  
标签:中间件 self request spider Agent scrapy User type

import random
from scrapy import signals
import fake_useragent
# 加载settings中的配置
from scrapy.utils.project import get_project_settings




class RandomUserAgentMiddleware:
    def __init__(self):
        allUA = fake_useragent.UserAgent().data_browsers
        self.pcUA = []
        self.mobileUA = []
        for eUA in allUA:
            if eUA['type'] == 'pc':
                self.pcUA.append(eUA['useragent'])
            elif eUA['type'] == 'mobile':
                self.mobileUA.append(eUA['useragent'])
    @classmethod
    def from_crawler(cls, crawler):
        # This method is used by Scrapy to create your spiders_news_bak.
        s = cls()
        crawler.signals.connect(s.spider_opened, signal=signals.spider_opened)
        return s

    def spider_opened(self, spider):
        spider.logger.info('加载随机User-Agent中间件')

    def process_request(self, request, spider):
        customSettings = spider.settings
        user_agent_type = customSettings.get('USER_AGENT_TYPE')
        if not request.headers.get(b'User-Agent', None):
            if user_agent_type == "mobile":
                request.headers.setdefault(b'User-Agent', random.choice(self.mobileUA))
            elif user_agent_type == "pc":
                request.headers.setdefault(b'User-Agent', random.choice(self.pcUA))
            else:
                request.headers.setdefault(b'User-Agent', random.choice(self.pcUA))

标签:中间件,self,request,spider,Agent,scrapy,User,type
From: https://blog.csdn.net/qq_35240081/article/details/140252045

相关文章

  • 【后端面试题】【中间件】【NoSQL】MongoDB查询优化3(拆分、嵌入文档,操作系统)
    拆分大文档很常见的一种优化手段,在一些特定的业务场景中,会有一些很大的文档,这些文档有很多字段,而且有一些特定的字段还特别的大。可以考虑拆分这些文档大文档对MongoDB的性能影响还是很大的,就我个人经验而言,认为可以考虑从两个角度出发拆分大文档:按照字段的访问频率拆分:......
  • 【后端面试题】【中间件】【NoSQL】MongoDB提高可用性的方案(主从结构、仲裁节点、分片
    主从结构MongoDB的高可用和别的中间件的高可用方案基本类似。比如在MySQL里,接触了分库分表和主从同步;在Redis里,Redis也有主从结构;在Kafka里,分区也是有主从结构的。所以先介绍启用了主从同步我们的系统有一个关键组件-MongoDB,但是在最开始的时候,MongoDB没有启用主从,是......
  • scrapyd_client deploy 内部实现简单说明
    scrapyd_clientdeploy提供了对于开发的spider的打包,同时push到scrapydserver中,因为python的特殊性,我们开发的spider可能有依赖,scrapyd_client会结合实际命令打包应用为是否包含依赖的egg包egg包处理对于egg包处理,scrapyd_clientdeploy会先检查spider项目中是否包......
  • appium自动化测试报错:Unable to launch com.facebook.WebDriverAgentRunner.maukkaki.
    嗨,我是兰若,今天在编写自动化测试用例的时候,appiuminspector报错:Unabletolaunchcom.facebook.WebDriverAgentRunner.maukkaki.xctrunner1、当时首先想到的就是检查WebDriverAgent的构建和安装是否正常,后来发现这块的安装是完全按照官方文档进行的,并且彼时我的手机上已经......
  • langchain学习之agent
    系列文章目录第一部分langchain入门以及prompt、解析器使用第二部分langchain学习之memory机制第三部分langchain学习之chain机制文章目录系列文章目录前言一、导入需要的库二、准备模型三、使用网上的工具四、代理写代码五、自定义写方法总结前言LangChain......
  • 智能体(Agent)解析:工作流程与市场应用
    本文由ChatMoney团队出品引言智能体(Agent)是一种在特定环境中自主行动、感知环境、做出决策并与其他智能体或人类进行交互的计算机程序或实体。它们具备自主性、反应性、社交性和适应性等特点,能够根据环境的变化调整自己的行为,以达到预设的目标。本文将详细拆解智能体从提示词接......
  • AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望
    AIAgent框架(LLMAgent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望1.AIAgent(LLMAgent)介绍1.1.术语Agent:“代理”通常是指有意行动的表现。在哲学领域,Agent可以是人、动物,甚至是具有自主性的概念或实体。AIAgent:AIAgent(人工智能代理)是一种能够感知环境、进行......
  • 智能体(Agent)解析:工作流程与市场应用
    本文由ChatMoney团队出品引言智能体(Agent)是一种在特定环境中自主行动、感知环境、做出决策并与其他智能体或人类进行交互的计算机程序或实体。它们具备自主性、反应性、社交性和适应性等特点,能够根据环境的变化调整自己的行为,以达到预设的目标。本文将详细拆解智能体从提示词接......
  • next.js 利用中间件(middleware.ts)实现PC与移动互相丝滑跳转
    场景描述产品要求开发一个落地页,为了美观,他要求这个两个页面分开设计,PC页面路由是`/landingpage`,移动端页面是`/landingpage/mobile`从用户角度出发,现在有一种访问场景,假如用户A正在访问PC页面`/landingpage`,然后他要把这个页面以微信方式分享给用户B,用户通过手机方式打开,那这个......
  • Django框架之Cookie和Session概念,Django操作cookie,Django操作Session,CBV添加装饰器
    ⅠDjango框架之Cookie和Session概念【一】Cookie与Session的发展史Cookie和Session是用来在Web应用程序中跟踪用户会话数据的两种常用技术。【1】Cookie的发展史1994年,网景通信公司推出了第一个浏览器Cookie技术。Cookie是存储在用户计算机上的小型文本文件,用于跟踪用户......