【python大神之路】scrapy的中间件使用流程

首先我们要知道scrapy的基本数据流向

scrapy 数据的基本流向

那个十字框架图我就不画了,数据处理是这样的:
spider -> 引擎-> 调度器 -> requests -> download下载器-> spider -> 引擎 -> pipline
spider指定url,给引擎,引擎让到调度器根据url生成request,丢给下载器;下载器生成response返回数据,数据再经过引擎丢给spider处理;处理完的数据需要保存,在由引擎丢给pipline,保存数据。

scrapy 设置代理

scrapy 设置免费代理

通常,如果不希望自己的ip被人察觉,我们也希望使用代理地址,去请求服务器。有许多免费网站提供免费ip。我们只需要写个中间件,拦截请求接口,给request对象设置proxy ip即可。

做法如下:

免费代理
 class ProxyDownloaderMiddleware:
     def process_request(self, request, spider):
         ip = choice(PROXY_IP_LIST)
         request.meta['proxy'] = "https://" + ip
         return None  # 放行

免费的ip未必好用,有时候会失效,所以有些公司提供人民币玩法,充钱就能变强,这里我们用 快代理 网站,只需要再写个中间件:

class MoneyProxyDownloaderMiddleware:

    def process_request(self, request, spider):
        proxy = "tps138.kdlapi.com:15818"
        request.meta['proxy'] = f"http://{proxy}"

        request.headers['Proxy-Authorization'] = basic_auth_header('username', 'password')
        request.headers["Connection"] = "close"

然后像上面免费版在 settings.py 里配置该中间件即可。

到此,我们讲完了 scrapy 的中间件作用,写法,配置。

最后在命令运行:

scrapy crawl 爬虫名

就可以跑起来我们刚才写的各种中间件了。

Original: https://blog.csdn.net/cdkd123/article/details/127562772
Author: toom_dp2px
Title: 【python大神之路】scrapy的中间件使用流程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/790933/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 2021 个人年度小结

    因为不用考研,所以大四一整年可以自由自在地学习一直以来想学却又没时间去学的东西。快乐的大四时光总是显得十分短暂,这篇博客主要用来总结过去一年所学的知识。 计算机组成原理 上的是哈尔…

    Python 2023年10月22日
    033
  • 车载毫米波雷达的性能标准与测试方法

    说明 本篇博文旨在探讨(给出)车载毫米波雷达的行业标准以及产品测试方法。参考资料以最新的行业标准为基准,并结合本人的一些理解做说明,现阶段博主并没有测试的经验(拿Ti的板子采数据和…

    Python 2023年11月8日
    048
  • Day03-登陆注册的案例(视图层的应用)

    实现注册和登录 注册:用户输入账号密码以后提交到服务器,服务器将账号密码保存在数据库中,然后重定向到登录页面登录:用户输入账号密码,服务器判断账号密码是否存在,如果存在登录成功跳转…

    Python 2023年8月5日
    043
  • PythonWeb框架——Flask(Flask基础与jinja2模板使用)

    一、flask基础 模板引擎使用Jinja2。 协议使用WSGI协议。 建议在虚拟环境下的终端输入: pip install Flask 使用下述代码创建一个Flask实例对象 f…

    Python 2023年8月13日
    046
  • 如何生成SHA2常数序列

    SHA-256算法中,使用64个4字节整型常量。这些常量表示前64个质数立方根小数部分的前32位。 要取立方根小数部分,需要了解double类型(8字节==64位)的内存布局,对应…

    Python 2023年9月17日
    034
  • ChatGPT评测

    总结:ChatGPT很强大,用作学术方面的问答或者软件行业的辅助工具是有一定的作用,但是有些回答设置了限制,并且中文回答方面总是回答一半,需要一直让他继续说,篇幅不是很长,但是往往…

    Python 2023年11月3日
    045
  • 为了防止这个网站消失,我连夜用Python离线了上万张图片

    之前好多高质量网站都不见了,肯定是你们整活整多了,趁你们不注意,我先悄悄多保存点~ ; 事前准备 让我们开始今天的操作 1、环境配置** 安装一个Python和pycharm就好了…

    Python 2023年11月2日
    062
  • Flask框架(下)

    Flask框架(下) 一、Flask-Script扩展命令使用 安装pip install Flask-Script导入Managerfrom flask_script impor…

    Python 2023年8月11日
    050
  • python多线程同步售票系统解决思路

    解决问题场景:假如剩余1000张电影票需要售卖,同时有10家电影App来售卖这1000张电影票。主要的逻辑实现过程是什么,要求使用python技术栈进行解题? 【阅读全文】 1、分…

    Python 2023年5月24日
    071
  • Pytest框架测试用例规则和运行方式

    目录 一、默认的测试用例规则 二、测试用例执行顺序 三、测试用例运行方式 3.1.主函数模式 3.1.1.主函数模式:4种运行方式 3.1.2.文件框架如下图 3.2.命令行模式 …

    Python 2023年9月12日
    069
  • 强化学习实战:自定义Gym环境之显示字符串

    如果想用强化学习去实现扫雷、2048这种带有数字提示信息的游戏,自然是希望自定义 gym 环境时能把字符显示出来。上网查了很久,没有找到gym自带的图形工具Viewer可以显示字符…

    Python 2023年6月3日
    076
  • Java之AQS

    AQS是什么 是用来实现锁或者其它同步器组件的公共基础部分的抽象实现,整体就是一个抽象的FIFO队列来完成资源获取线程的安排工作,并通过一个int类变量表示持有锁的状态。 ; 使用…

    Python 2023年9月17日
    045
  • python实现AES加密

    1.AES加密 2.需要导入的模块 3.定义好全局变量 4.编写加密函数 5.将密文解密 6.完整代码 1.AES加密 AES的区块长度固定为128 比特,密钥长度则可以是128,…

    Python 2023年8月2日
    062
  • Mysql索引学习笔记

    https://www.jianshu.com/p/ace3cd6526c4 推荐up主https://space…

    Python 2023年10月22日
    036
  • 一文搞懂 conda 与 pip 的区别

    背景 最为 python 的包安装工具,conda 与 pip 经常性的被使用,但却不甚了解两者之间的区别,现总结一下。 被设计的初衷 Pip:专门从 Python Package…

    Python 2023年9月8日
    074
  • Python库积累之pandasql:在 Python 中对Dataframe使用 SQL

    Pandasql简介 Pandasql是一个可以让我们直接在Python中对Dataframe进行SQL查询的库。 Python中虽然内置有sqlite数据库,但是如果我们使用sq…

    Python 2023年8月19日
    059
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球