Day 24 24.1 Scrapy框架之下载中间件

Scrapy框架之下载中间件

class MyDownMiddleware(object):
    def process_request(self, request, spider):
        """
        请求需要被下载时,经过所有下载器中间件的process_request调用
        :param request: 
        :param spider: 
        :return:  
            None,继续后续中间件去下载;
            Response对象,停止process_request的执行,开始执行process_response
            Request对象,停止中间件的执行,将Request重新调度器
            raise IgnoreRequest异常,停止process_request的执行,开始执行process_exception
        """
        pass


    def process_response(self, request, response, spider):
        """
        spider处理完成,返回时调用
        :param response:
        :param result:
        :param spider:
        :return: 
            Response 对象:转交给其他中间件process_response
            Request 对象:停止中间件,request会被重新调度下载
            raise IgnoreRequest 异常:调用Request.errback
        """
        print('response1')
        return response

    def process_exception(self, request, exception, spider):
        """
        当下载处理器(download handler)或 process_request() (下载中间件)抛出异常
        :param response:
        :param exception:
        :param spider:
        :return: 
            None:继续交给后续中间件处理异常;
            Response对象:停止后续process_exception方法
            Request对象:停止中间件,request将会被重新调用下载
        """
        return None

案例

import logging
import time
import random


# http://httpbin.org/get
class TestMiddleware:
    """This middleware allows spiders to override the user_agent"""
    user_agent_list = [
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299',
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36',
        'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    ]

    proxies = [
        "http://61.216.185.88:60808",
    ]

    def process_request(self, request, spider):
        # 设置一个随机的UA
        request.headers['User-Agent'] = random.choice(self.user_agent_list)

        # 每一个请求延迟随机时间
        delay = random.uniform(0, 1)
        time.sleep(delay)
        logging.info(f"延迟{delay}秒发起请求")

        # 设置随机代理IP
        random_ip = random.choice(self.proxies)
        request.meta["proxy"] = random_ip
        logging.info(f"当前代理IP{random_ip}")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy 是一个用于爬虫的开源框架,可以帮助我们更加便捷地进行网页数据的下载和提取。使用 Scrapy 框架下载数据的过程如下: 1. 首先,我们需要安装 Scrapy 框架。可以通过 pip 命令来进行安装:"pip install scrapy"。 2. 创建一个新的 Scrapy 项目。在命令行中,使用 "scrapy startproject 项目名" 来创建一个新的项目目录。 3. 进入项目目录,并创建一个新的 Spider。使用命令 "scrapy genspider spider名 网站域名" 来生成一个新的爬虫模板。 4. 打开生成的爬虫文件,在其中的 parse 方法中编写数据提取的逻辑。可以使用 XPath 或 CSS 选择器来定位需要下载的数据。 5. 在 settings.py 文件中进行配置。可以设置 User-Agent、下载延时、并发数等参数,以及自定义的中间件、管道等。 6. 运行爬虫。在命令行中,使用 "scrapy crawl 爬虫名" 来启动爬虫,并开始网页数据的下载和提取。 7. 下载的数据可以保存为文件或者直接存入数据库。可以在爬虫文件中定义自己的 Item 类,并在管道文件中进行数据的处理和存储。 通过以上步骤,我们可以使用 Scrapy 框架方便地进行网页数据的下载Scrapy 框架不仅提供了简洁的API和强大的功能,同时还支持并发、自动限速等功能,大大提高了爬虫的效率和稳定性。无论是对于个人爬虫项目还是针对大规模数据的爬取,Scrapy 都是一个非常好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值