「干货」菜鸟都能看懂的爬虫Scrapy入门指南

发布时间:2026/8/24 14:34:12

「干货」菜鸟都能看懂的爬虫Scrapy入门指南
原创芮舟 菜鸟学可将网络数据抓取的小脚本, 也就是爬虫, 是能把访问资源、获取数据以及入库保存这一过程实现自动化的一种工具。能够成为很好爬虫工具的有“挂机神器”按键精灵, 还有“抢课神器”, 想必大家对这两者已经是历经比较熟悉的状况了。但于生产工作里, 多数情形下, 使先前那两种工具虽是能得数据的, 然而对于服务器资源的耗费是相对较大的, 并且效率一般无法达至要求的指标。推敲其中缘由, 不外乎这两个工具于获取了对应的那些数据以后还得进行渲染展示, 此项环节会引发额外的资源消耗。所以, 要提升数据抓取的效率是还得回归质朴本真, 回到起始的那一点部位源头, 拿出原始的请求响应来作一番研究考量的。HTTP请求于浏览器之内键入链接而后回车, 便能够见到所展示的网页, 这样的话, 我们首先来瞧一瞧键入的URL通常情况下, 应用层里, 网页数据的请求以及访问是基于HTTP即超文本传输协议的, 那么, HTTP协议是以怎样的方式封装传输的数据的呢?一个HTTP请求被划分成起始行, 头部字段以及请求体这三个部分, 起始行涵盖了该请求的基本信息, 即请求方法, 请求资源路径以及请求协议/版本, 它在构建一个请求时处于极为基础且关键的地位, 次之便是若干行的头部字段, 其包含了该请求的描述信息, 举例来说, 诸如User - Agent等等, 最后就是请求体这个部分, 这里面存在着具体的请求参数等各式各样的信息。通常来讲, 常用的请求方法存在GET与POST这两种, 当中GET方法的请求参数信息借助键值对的形式被放置于URL里面, 于资源路径之后经由“? ”起始以keyvalue的样式, 键值对彼此之间用“”分隔开。因而GET方法是不存在请求体内容的。相对而言, POST请求的请求参数依照访问接口要求依照一定的组织方式放置于请求体之中, 所以POST请求通常是具备请求体内容的。看完请求我们来看看请求的响应。存在这样一种情况, 一个HTTP请求所对应的响应, 它被划分成了三个部分, 分别为状态行, 头部字段以及响应体。如同HTTP请求那般, 状态行同样涵盖了关于该响应的描述信息, 这里面包含着传输协议以及版本, 还有响应状态码以及状态短语, 一般情况下要是请求成功了, 就会得到“200 OK”这样的状态。响应头当中常常会有针对解读响应体内容的相关信息, 比如说-Type以及Set-等类似的信息, 其中有些信息对于数据抓取的整个流程而言是极为关键的。响应的内容全部都处于响应体里面, 并且是以特定的结构呈现出来的, 常见的能够呈现响应内容的数据格式有HTML以及JSON。中的HTTP获悉完HTTP协议之后, 接下来便着手尽力去运用发送一回HTTP请求。通常情况下我们选用那个模块。:。因为它是“仅有的那一个并非转基因的库, 人类能够安全地享用”, 而且“要是非专业地去使用其他HTTP库, 就会引发危险的副作用, 涵盖: 安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼, 乃至死亡”以上这些理由源自文档。:。赶紧发个HTTP请求压压惊允许你去发送纯天然、植物饲养的HTTP/1.1请求, 无需手工劳动的状态下, 你不需要手动为URL添加查询字串, 也不需要对POST数据进行表单编码, Keep-alive和HTTP连接池的功能是100%自动化的, 一切动力都来自于根植在内部的。正如文档介绍的, 基于并封装整合了一系列功能, 给出了十分优雅简洁的API, 称得上是玩转HTTP的必备良药, 请求三连可以这样愉快地完成。然而, 我们所需的数据, 极有可能是数以万计, 甚至十万计甚至更多, 每获取一条数据时, 通常都要进行两次以上的请求。这致使我们顺次进行请求所耗费的时间, 将难以接受。并发于是就成了一个必定的选择项。于此, 我们可以试验一下.4的新特性: I/O。I/O也就是异步 IO, 它是基于事件循环来达成协程的并发运行, 并对其流程加以控制。对于爬虫这种频繁开展 IO操纵的情形具备非常出色的适应性。凭借新特性的助力, 我们能够借助async以及await关键字去定义一个协程, 并且等待其返回, 随后于一个事件循环里运行该协程。以同步代码的风格撰写一个异步过程:尝试一回便会发觉效率出现了极大的提高, 差不多仅仅是发送一次请求的用时。持续不断地引入并置操作, 始终处在并立存在的状态下, 真的是否会一直如此畅快呢? 于真实的运用场景里, 针对并置的数量设定需要依据具体情形来确定如何进行, 过高的并立情况会对目标网站的正常运转产生干扰, 还会致使数据的源头处于无法使用的状态, 务必尽力规避此种情形。然而问题再度出现了, 在编写了几个爬虫之后, 我们察觉到, 因诸多代码无法被重复使用, 致使开发效率比较低, 就爬虫框架其中而言, 它封装了一些常用的模块以及工具。框架框架是完全用实现的网络爬虫框架(:它内里封装着大量常用的脚本以及流程代码, 这样子能够大幅提升开发的效率。它还是个灵活性尤为突出的框架呢, 我们能够自行去编写框架的组件, 以此来把控框架的行为, 进而达成自己期待的效果。为了实现了解的目的, 先呈上一张经典的图:的组件主要分为1.引擎 此组件乃内核组件, 用以针对请求、响应、数据Item以及信号予以转发与调度等相关操作皆是靠它施行, 而其余组件间的数据交互工作悉归引擎全权负责。2.调度器存放着尚未发出请求的, 把它加入队列之中, 并且依据权重去调整顺序, 以供引擎取用。3.爬虫主要用来处理响应信息的该组件, 可提取以及组织信息, 还会产生新的请求, 此组件同样是使用框架之际主要去写的部分。4.数据管道用来逐个处理被提取出来的数据, 随后做写文件这件事, 接着进行入库保存, 并且推送至数据队列等地。5.下载器发送自引擎那儿得到的请求, 而后等候请求的回应, 再把回应交还给引擎。6.中间件中间件被划分成下载中间件以及爬虫中间件, 下载中间件处于引擎与下载器中间并且是用于加工请求和响应的那种, 爬虫中间件是处在爬虫跟引擎之间的, 它是用于处理爬虫所接受以及产生的响应和请求的。一个完整工作流程如下a) 引擎向调度器获取待处理请求请求对象的实例b) 调度器给出调整顺序后队列中最靠前的请求交给引擎c) 引擎将取得的请求交给下载中间件依次加工d) 加工之后的请求交于下载器下载器发出请求并等待响应e)下载器获取响应响应对象的实例交给下载中间件依次加工f加工好的响应交回到引擎那里, 引擎是会依据所得到的响应存在不同情况的, 这种不同能够让引擎把响应交付给爬虫中间件, 或者是记录下异常状态, 进而舍弃掉该响应等, 就是这样。g) 爬虫中间件依次加工响应并交给爬虫处理h) 爬虫对响应数据进行解析, 进而产生新请求, 或者生成数据条目, 随后将其交给爬虫中间件去进行加工。i) 爬虫中间件给出请求, 由引擎获取, 之后交于调度器队列, 调度器队列获取数据条目, 再把数据条目交于数据管道。j) 数据管道依次处理所获数据其中, 会实例化数个下载器, 这些下载器会以并发的方式进行请求的发送, 除此之外, 其他部分组件均为同步顺序执行, 因此, 在组件当中, 尽可能避免会致使频繁阻塞的代码是可以避免影响框架运行效率的。组件组件中最为常用的为 我们分别看下是用于处理响应的类对象, 它属于爬虫里最为多样的那个部分, 而在通常状况下, 它同样也是编写代码数量最多的那一部分。我们所进行编写的类, 通常是.的子类, 在这个类里边存在类属性“name”, 凭借这个类属性, 得以对同一工程项目之下不同的爬虫予以区分。一轮爬取起始于一个或者若干起始URL, 通常会默认存放在类属性里, 默认由方法对其中的URL进行遍历并且以GET方法发出请求, 此方法默认会把发出的请求绑定parse方法当作回调函数。请求与回调函数, 对象的属性的值是类里的一个方法并非执行结果, 引擎会交给下载器去处理, 之后等待下载器获取响应, 当下载器返回响应信息时, 引擎会调用由上述属性所指明的函数来处理响应。类里的方法首要功能是当作请求的回调函数用以处理请求的回应信息。该方法有着一个参数对象 , 这个对象里包含了响应的全部信息包含着响应状态码 、响应头 、响应体以及响应文本等等。此外 , 对象还封装了解析html的选择器工具Xpath , 其中css选择器路径会首先被转变为xpath路径。值得留意的是, 里的函数全都是生成器函数, 并非运用, 而是借由yield关键字来回传数据, 其缘由简要来讲便是, 这些方法于引擎调用之际, 是以回调函数的形式被捆绑于请求的回调链里, 在处理完一个之后, 得借助yield来暂缓, 等候下一次调用。所以这些方法没办法以普通函数的形式去调用, 直接调用所返回的仅仅是一个生成器对象, 另外呢, 鉴于异步并发的缘故, 方法内部也不是一次就能完整执行一回, 在yield暂缓之后, 会在下一个事件循环里才接着往下运行。:模块里存在中间件的设置与开启情况, 其是以字典的形式予以呈现的, 其中, key是为中间件模块的导入路径呈相同路径, 而后有一个整数, 这一整数担当value的角色, 它所表达的是对于该中间件给予的权重。就下载中间件来讲, 在数量方面, 权重越小, 那么距离引擎就更近, 对于权重而言, 权重若是越大, 那么于下载器的靠近程度就越高。在进行与处理上, 不管是处理还是和, 都是按照经过的顺序, 一个接着一个顺次推进开展而进行的。框架里, 下载中间件乃是极具灵活性的部分, 它针对于请求跟响应的处理流程, 能够予以幅度极大的自由定制, 然其使用起来略微存在些复杂程度, 我们来瞧一瞧中间件里头的方法, 有一个方法, 以及另外一个方法, 还有再一个方法。请求经过时会被调用, 它接收两个参数, 和, 引擎调用时会默认传入, 分别是待处理的对象以及该请求产生的对象, 在这个方法里能够对对象予以加工, 增加其属性或者在META字典里增添字段传递信息。此方法允许返回对象, 或者返回一个异常, 又或者全无返回也就是返回None。返回对象时, 这个对象不会再传递给后续的中间件, 而是再度进入调度器队列等待引擎调度。该异常在返回异常之际, 会当成中间件方法的参数给传入进去, 要是并没有方法存在的话, 那么就会交由该请求所绑定的方法去进行处理。要是没有返回的情况, 就会把对象交付给下一中间件去处理。那个被调用的操作, 是在响应已经被返回经过的时候才进行的, 它能够接受总共3个参数, 具体来讲, 这3个参数分别是对象, 之后又是对象, 最后还是对象。这里提到的对象状态和前面讲述的一样, 第二个对象指的是下载器返回的响应, 而第三个对象表示促使产生该响应的请求, 这和之前提到的情况有所差异, 在这儿的第三个对象里面并没有特定属性, 它是和前面的对象一样作为参数被传入进来的。在这个特定的方法当中, 可以针对下载器返回的响应展开处理工作, 这里面涵盖了对响应的过滤操作, 还有校验操作, 以及和之前情况中存在耦合关系的操作, 像是池相关的操作以及代理池相关的操作等等。这个方法允许出现3种返回情况, 分别是对象, 再次是对象, 还有就是异常。在返回对象之际, 如同上一方法那般操作, 于返回对象之时, 此情形将会交付给下一中间环节接着去处理, 然而返回异常的状况下, 便会径直传送给该请求所绑定的方法予以处理。方法于下载器或返回异常之际被调用, 此情形之下会接受三个对象作为参数, 其中头一个对象系产生这个异常的请求。它存在三种返回情况, 其一为返回对象, 其二为返回对象, 其三是无返回情形。当出现无返回状况时, 该异常会被后续的中间件予以处理假如返回对象以及返回对象, 那么均不会再去调用后续的方法, 前者会交给调度器加入队列, 后者则会交由处理。能够看得出, 中间件实则是一个钩子, 它能够拦截, 进而加工, 甚至还能够替换请求以及响应, 依照我们所期望的那样去控制下载器接收并返回的对象。鉴于爬虫工作的进程主要是处理各类请求与响应, 因而下载中间件能够极大限度地管控爬虫的运行。数据管道是用于处理数据当中的组件, 当中的方法yield出一个字典或.Item类以及它的子类时, 引擎会把它交给处理, 和中间件非常相似地, 数据条目将凭借这个来进行处理, 其中权重约小的, 处理时就会越早被调用。有一个对象, 它要实现一种方法, 这种方法要接受item, 还有两个参数, 这里面的item指的就是所处理的数据。这个方法能够返回item, item是字典或者.Item类以及它的子类, 也能够返回异常或者对象。一旦返回的是item, 那么这个item会被交给下一个去继续处理, 要是返回的是异常, 那就不会再往后传递item。除此之外, 一些耗时的操作, 比如说插入数据库这些操作, 能够通过返回对象来达成异步操作。可于上述组件里实现, 以及这类方法, 用来在流程起始与结束之际, 还有初始化之时实行自定义设定或者资源初始化及回收行动等呀, 致使整个流程更为“”。小结这是个相当出色的框架, 具备友善的文档以及活跃的社区。实际上, 撇开文档不谈, 源码本身就是绝佳的文档, 于阅读代码之际能够获取诸多使用以及框架设计方面的技巧。爬虫属于一件饶有趣味的事情, 从异步过渡到并发, 由登录延伸至JS加密, 总是能够发觉惊喜。期望大家在获取数据的时候也能够收获一份乐趣。最终, 身为一名拥有很多年开发经历的资深程序员, 我辞去工作现在在着手做个人的定制课程, 今年年初时, 我耗费一个月的时间整理出一份为最适配 2019 年用于学习的学习实用资料, 能够赠送给每一位心怀喜爱的小伙伴, 要是想得到的话, 可以对我的头条号予以关注并且在后台给我发送私信: 01, 便能免费获取。

相关新闻

DeepSeek Harness 源码安装避坑,Node 版本与 pnpm 依赖冲突处理

DeepSeek Harness 源码安装避坑,Node 版本与 pnpm 依赖冲突处理

2026/8/24 14:34:12

源码安装前的环境自检 DeepSeek Harness 的源码安装并不复杂,但前提是环境得先对上路子。官方文档里写得清楚:Node.js 需要 v22.19 及以上,或者直接用 v24 系列,包管理器指定 pnpm。听起来没几行字,实际踩坑的人里&…

DeepSeek Harness 极简模式跑 Terminal Bench,模型基准测试实操

DeepSeek Harness 极简模式跑 Terminal Bench,模型基准测试实操

2026/8/24 14:34:12

为什么极简模式是评测模型工具调用能力的“干净画布” DeepSeek Harness 提供了四种运行模式,其中极简模式(Minimal)被官方专门用于 Terminal Bench 等基准测试场景。这个设计思路很直接:当你想评估模型“纯粹”的工具调用能力时&…

GAMS全版本安装包下载|含28.2/25.1/23.9全求解器|附详细安装指南与用户手册

GAMS全版本安装包下载|含28.2/25.1/23.9全求解器|附详细安装指南与用户手册

2026/8/24 14:34:12

温馨提示:文末有联系方式 全版本GAMS安装包|覆盖主流求解器 本提供GAMS兼容的全功能安装包,涵盖最新版28.2、稳定版25.1及经典版23.9三个主流版本,每个版本均预集成全部内置与外接求解器(含CPLEX、GUROBI、MOSEK、CONO…

MGit:免费Android Git客户端,5步克隆并推送你的第一个提交

MGit:免费Android Git客户端,5步克隆并推送你的第一个提交

2026/8/24 16:14:16

MGit:免费Android Git客户端,5步克隆并推送你的第一个提交 【免费下载链接】MGit A Git client for Android. 项目地址: https://gitcode.com/gh_mirrors/mg/MGit 在外面遇到一个小 bug 却只能等回工位才能修?MGit 是一款免费的 Andro…

人工智能实践报告全流程指南:从MNIST手写识别到工程化实现

人工智能实践报告全流程指南:从MNIST手写识别到工程化实现

2026/8/24 16:14:16

如果你正在为《人工智能导论》的期末实践报告发愁,不知道如何从零开始,把课堂上学到的理论变成一行行能跑的代码,更不知道如何把项目包装成一份能拿高分的报告,那么这篇文章就是为你准备的。很多同学对“实践报告”的理解存在误区…

选对AI论文平台提前 2 周交稿!实测好用清单 + 防坑指南

选对AI论文平台提前 2 周交稿!实测好用清单 + 防坑指南

2026/8/24 16:14:16

每到毕业季,无数同学陷入论文循环:选题毫无头绪、写初稿卡壳、反复改格式、查重标红一大片、AIGC检测风险高悬,通宵熬夜成为常态。很多人误以为AI工具就是一键生成整篇论文,踩坑之后才发现,工具选不对,不仅…

GetQzonehistory 使用指南:把QQ空间说说导出到本地

GetQzonehistory 使用指南:把QQ空间说说导出到本地

2026/8/24 16:14:16

GetQzonehistory 使用指南:把QQ空间说说导出到本地 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 翻自己2011年的QQ空间时,我发现不少早年的说说和图片已经点不…

游戏内存修改实战:从原理到实现,让NPC跳舞的逆向工程指南

游戏内存修改实战:从原理到实现,让NPC跳舞的逆向工程指南

2026/8/24 16:14:16

最近在游戏开发社区里,一个现象级的“梗”正在悄然流行:玩家们不再满足于在《GTA》里开着豪车横冲直撞,而是开始热衷于“调教”游戏里的NPC。你有没有想过,如果能让那个永远追着你跑的警察“T仔”停下脚步,甚至为你跳一…

构建个人技术资产管理系统:基于零和哲学与Git、Docker的实践指南

构建个人技术资产管理系统:基于零和哲学与Git、Docker的实践指南

2026/8/24 16:04:16

最近在整理个人技术资产时,我遇到了一个经典难题:如何高效、安全、可追溯地管理那些分散在本地、云端、甚至不同设备上的“数字资产”?这里的资产,不仅仅是代码仓库,更包括项目文档、配置模板、学习笔记、实验数据、甚…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/23 0:02:09

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/23 0:02:09

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/23 0:02:09

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定

2026/8/24 0:03:28

OpenModScan:免费跨平台 Modbus 主站调试工具,让现场通讯验证一键搞定 【免费下载链接】OpenModScan Open ModScan is a Free Modbus Master (Client) Utility 项目地址: https://gitcode.com/gh_mirrors/op/OpenModScan OpenModScan 是一款开源免…

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化

2026/8/24 0:03:28

WechatHook 终极指南:5大核心能力详解,3分钟看懂微信自动化 【免费下载链接】WechatHook Enjoy hooking wechat by Xposed....Accessibility...and so on... 项目地址: https://gitcode.com/gh_mirrors/we/WechatHook WechatHook 是一个基于 Xpos…

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南

2026/8/24 0:03:28

如何在ThinkPad X390上安装macOS:OpenCore EFI完整指南 【免费下载链接】ThinkpadX390-Opencore-EFI macOS Catalina & Big Sur & Monterey on ThinkPad X390 (Hackintosh) 项目地址: https://gitcode.com/gh_mirrors/th/ThinkpadX390-Opencore-EFI …

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/22 4:13:47

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/22 1:32:34

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…