Scrpy 使用中间件(middleware)实现随机UA

前言

UA,即USER_AGENT,是在Request中的header(请求头)部分包含的一个键值对,常用于标志浏览器名称及版本。

Q:为什么设置随机UA?
A:

  • 有的网站采用了UA黑/白名单机制,不适用合规的UA会导致无法正确地爬取到正常访问的网页。
  • 使用随机请求头,能更好地伪装浏览器,防止被Ban。

Q:如何在每次请求时,更换不同的USER_AGENT?
A:在Scrapy启用DOWNLOADER_MIDDLEWARES

DOWNLOADER_MIDDLEWARES 中文文档
DOWNLOADER_MIDDLEWARES 英文文档

于是,操作步骤如下:

  1. 创建中间件
  2. 配置启用中间件

1.创建中间件

scrapy框架在创建项目的时候,已经默认创建了一个middlewares.py文件,我们在文件的末端添加以下代码,便可创建一个属于我们自己的中间件组件。

import random


class RandomUserAgent(object):
    def __init__(self):
        self.user_agent_list = [
            'Opera/8.0 (Windows NT 5.1; U; en)',
            'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
            'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50'
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Scrapy中间件是一种可以在Scrapy引擎和Spider之间插入自定义逻辑的机制。它可以用来完成如下任务: - 处理请求和响应 - 添加额外的请求 - 修改请求和响应 要使用中间件,需要在项目的settings.py文件中进行配置。可以在该文件中配置中间件的先后顺序。 - 为爬虫添加中间件,可以在settings.py文件中的SPIDER_MIDDLEWARES设置中添加中间件类。 - 为下载器添加中间件,可以在settings.py文件中的DOWNLOADER_MIDDLEWARES设置中添加中间件类。 通常情况下可以选择继承scrapy自带的中间件或自己编写中间件,调用自己需要的方法 例如定义一个中间件类 ``` class MyMiddleware: def process_request(self, request, spider): # request 处理逻辑 pass def process_response(self, request, response, spider): #response 处理逻辑 pass ``` 在settings.py中配置中间件 ``` DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.MyMiddleware': 543, } ``` 然后你就可以在爬虫中使用这个中间件了。 ### 回答2: Scrapy是一个用于爬取网站数据的Python框架,它提供了许多强大的功能,其中一个就是中间件Middleware)。 中间件Scrapy处理请求和响应的机制,可以在请求发送给下载器之前和响应返回给爬虫之前对其进行处理。使用中间件可以在爬虫运行过程中插入自定义的功能,例如修改请求参数、处理异常、添加代理等。 使用Scrapy中的中间件非常简单,只需要按照以下步骤进行操作: 1. 创建一个中间件类,该类需要继承ScrapyMiddleware类,并实现其中的方法,如下所示: ``` from scrapy import signals class MyMiddleware(object): def __init__(self): pass @classmethod def from_crawler(cls, crawler): middleware = cls() crawler.signals.connect(middleware.spider_opened, signal=signals.spider_opened) crawler.signals.connect(middleware.spider_closed, signal=signals.spider_closed) return middleware def process_request(self, request, spider): # 对请求进行处理 return None def process_response(self, request, response, spider): # 对响应进行处理 return response def spider_opened(self, spider): pass def spider_closed(self, spider): pass ``` 2. 在Scrapy的配置文件settings.py中添加中间件,如下所示: ``` DOWNLOADER_MIDDLEWARES = { 'myproject.middlewares.MyMiddleware': 543, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 543, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 544, } ``` 注意:中间件的优先级通过数字进行设置,数字越小,优先级越高。 3. 根据需求实现中间件的具体功能。例如,可以在`process_request`方法中实现修改请求参数的功能,在`process_response`方法中实现处理异常的逻辑。 以上就是使用Scrapy中间件的简单介绍和示例,通过使用中间件,我们可以在爬虫运行过程中对请求和响应进行灵活的处理,扩展了Scrapy框架的功能和灵活性。 ### 回答3: Scrapy是一个用于爬取网站数据的Python框架,它提供了一个灵活且可扩展的机制来处理不同网站的爬取需求。其中,middleware中间件)是Scrapy中一个非常重要的组件,用于在请求和响应之间进行预处理和后处理操作。 Scrapy中的middleware可以用于修改请求和响应的内容,例如添加、修改或删除请求头、对请求进行代理、修改响应的内容或状态码等。通过使用middleware,可以在爬取过程中实现多种自定义的功能,例如用户代理轮换、请求去重、反爬虫机制等。 使用middleware的步骤如下: 1. 创建一个自定义的middleware类并继承ScrapyMiddleware类。 2. 在Middleware类中实现预处理和后处理操作的具体逻辑,可以通过重写相应的方法来实现,例如process_request、process_response等。 3. 在Scrapy的配置文件settings.py中启用该middleware,即将其添加到DOWNLOADER_MIDDLEWARES配置项中,并设置其优先级(数值越小,优先级越高)。 在使用middleware时,可以根据实际需求选择使用Scrapy已经内置的middleware,或者自定义一个middleware类来满足特定的爬取需求。Scrapy内置的一些middleware包括UserAgentMiddleware(设置请求的user agent)、RetryMiddleware(处理请求失败或异常情况)等。 总之,middlewareScrapy中是一个非常重要的组件,通过使用middleware可以实现对请求和响应的灵活处理,从而提高爬虫的效率和功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值