Scrapy中间件(代理、Cookie、请求头、UA)

以下是一个Scrapy中间件的示例,用于设置请求的代理、Cookie和请求头,以及随机更换User-Agent:




import random
from scrapy import signals
from scrapy.downloadermiddlewares.cookies import CookiesMiddleware
from scrapy.downloadermiddlewares.httpproxy import HttpProxyMiddleware
from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
 
class MyCustomMiddleware(object):
    def __init__(self, proxy_url=None, cookie_name=None, user_agent_list=None):
        self.proxy_url = proxy_url
        self.cookie_name = cookie_name
        self.user_agent_list = user_agent_list
 
    @classmethod
    def from_crawler(cls, crawler):
        # 从Scrapy的配置文件中读取参数
        proxy_url = crawler.settings.get('PROXY_URL')
        cookie_name = crawler.settings.get('COOKIE_NAME')
        user_agent_list = crawler.settings.get('USER_AGENT_LIST')
        # 创建中间件实例
        middleware = cls(proxy_url, cookie_name, user_agent_list)
        # 将信号连接到相应的处理函数
        crawler.signals.connect(middleware.spider_opened, signal=signals.spider_opened)
        return middleware
 
    def process_request(self, request, spider):
        # 设置代理
        if self.proxy_url:
            request.meta['proxy'] = self.proxy_url
        
        # 设置Cookie
        if self.cookie_name:
            request.cookies[self.cookie_name] = 'your_cookie_value'
            # 或者使用CookiesMiddleware
            # CookiesMiddleware.process_request(request, spider)
        
        # 设置User-Agent
        if self.user_agent_list:
            user_agent = random.choice(self.user_agent_list)
            request.headers.setdefault('User-Agent', user_agent)
            # 或者使用UserAgentMiddleware
            # UserAgentMiddleware.process_request(request, spider)
 
    def spider_opened(self, spider):
        # 当爬虫开启时,可以进行一些初始化操作
        pass

在Scrapy的配置文件(settings.py)中,你需要启用这个中间件,并设置相应的参数:




DOWNLOADER_MIDDLEWARES = {
    'myproject.middlewares.MyCustomMiddleware': 543,
}
 
# 配置代理服务器
PROXY_URL = 'http://your.proxy.com:port'
 
# 配置Cookie名称
COOKIE_NAME = 'my_cookie_name'
 
# 配置User-Agent列表
USER_AGENT_LIST = [
    'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)',
    'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0',
    # ...更多User-Agent字符串...
]

这个中间件示例提供了如何在Scrapy爬虫中设置代理、Cookie和User-Agent的方法,并且可以随机选择User-Agent来避免被对方服务器识别。在实际应用中,你需要根据自己的需求进行相应的配置。

最后修改于:2024年08月17日 20:19

评论已关闭

推荐阅读

Vue中使用mind-map实现在线思维导图
2024年08月04日
VUE
Web前端最全Vue实现免密登录跳转的方式_vue怎么样不登录返回首页,最强技术实现
2024年08月04日
VUE
vue3 项目搭建教程(基于create-vue,vite,Vite + Vue)
2024年08月04日
VUE
Vue-颜色选择器实现方案——>Vue-Color( 实战*1+ Demo*7)
2024年08月04日
VUE
Vue项目卡顿慢加载?这些优化技巧告诉你!_vue数据多渲染卡顿
2024年08月04日
VUE
vue中的keep-alive详解与应用场景
2024年08月04日
VUE
Vue、React实现excel导出功能(三种实现方式保姆级讲解)
2024年08月04日
vue-office/docx插件实现docx文件预览
2024年08月04日
VUE
java调用js文件的两种方法(支持V8引擎)
2024年08月04日
JavaScript:解决计算精度问题/mathjs/bignumber.js/big.js/decimal.js
2024年08月04日
两周从爬虫小白变大神 _yjs_js_security_passport
2024年08月04日
JS笔记(对象、函数、数组)
2024年08月04日
Markdown.js:强大的纯JavaScript Markdown解析器
2024年08月04日
Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。
2024年08月04日
vue 父组件怎么获取子组件里面的data数据
2024年08月04日
VUE
个人开发实现AI套壳网站快速搭建(Vue+elementUI+SpringBoot)
2024年08月04日
el-table 表格封装并改造实现单元格可编辑
2024年08月04日
none
nodejs环境下创建vue项目、SSH密钥登陆!!!
2024年08月04日
vue+quill+element-ui实现视频、图片上传及缩放保姆级教程,轻松使用富文本
2024年08月04日
【three.js】22. Imported Models导入模型
2024年08月04日