您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

掌握Scrapy框架,轻松实现网页自动化爬取

时间:2023-09-10 11:10:48  来源:书圈  作者:

爬虫框架:Scrapy

01

爬虫框架:Scrapy

按照官方的说法,Scrapy是一个“为了爬取网站数据,提取结构性数据而编写的Python/ target=_blank class=infotextkey>Python应用框架,可以应用在包括数据挖掘、信息处理或存储历史数据等各种程序中”。Scrapy最初是为了网页抓取而设计的,也可以应用在获取API所返回的数据或者通用的网络爬虫开发之中。作为一个爬虫框架,可以根据自己的需求十分方便地使用Scrapy编写出自己的爬虫程序。毕竟要从使用Requests(请求)访问URL开始编写,把网页解析、元素定位等功能一行行写进去,再编写爬虫的循环抓取策略和数据处理机制等其他功能,这些流程做下来,工作量其实也是不小的。使用特定的框架有助于更高效地定制爬虫程序。作为可能是最流行的Python爬虫框架,掌握Scrapy爬虫编写是在爬虫开发中迈出的重要一步。从构件上看,Scrapy这个爬虫框架主要由以下组件组成。

① 引擎(Scrapy): 用来处理整个系统的数据流处理, 触发事务,是框架的核心。

② 调度器(Scheduler): 用来接收引擎发过来的请求, 将请求放入队列中, 并在引擎再次请求的时候返回。它决定下一个要抓取的网址, 同时担负着网址去重这一项重要工作。

③ 下载器(Downloader): 用于下载网页内容, 并将网页内容返回给爬虫。下载器的基础是twisted,一个Python网络引擎框架。

④ 爬虫(Spiders): 用于从特定的网页中提取自己需要的信息, 即Scrapy中所谓的实体(Item)。也可以从中提取出链接,让Scrapy继续抓取下一个页面。

⑤ 管道(Pipeline): 负责处理爬虫从网页中抽取的实体,主要的功能是持久化信息、验证实体的有效性、清洗信息等。

⑥ 下载器中间件(Downloader Middlewares): Scrapy引擎和下载器之间的框架,主要处理Scrapy引擎与下载器之间的请求及响应。

⑦ 爬虫中间件(Spider Middlewares): Scrapy引擎和爬虫之间的框架,主要工作是处理爬虫的响应输入和请求输出。

⑧ 调度中间件(Scheduler Middewares): Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。

它们之间的关系示意如图1-6所示。

■ 图1-6Scrapy架构

可以通过pip十分轻松地安装Scrapy,安装Scrapy首先要使用以下命令安装lxml库:pip install lxml。

如果已经安装lxml,那就可以直接安装Scrapy:pip install scrapy。

在终端中执行命令(后面的网址可以是其他域名,如www.bAIdu.com):scrapy shell www.douban.com。

可以看到Scrapy shell的反馈,如图1-7所示。

■ 图1-7Scrapy shell的反馈

为了在终端中创建一个Scrapy项目,首先进入自己想要存放项目的目录下,也可以直接新建一个目录(文件夹),这里在终端中使用命令创建一个新目录并进入:

之后执行Scrapy框架的对应命令:

会发现目录下多出了一个新的名为newcrawler的目录。其中items.py定义了爬虫的“实体”类,middlewares.py是中间件文件,pipelines.py是管道文件,spiders文件夹下是具体的爬虫,scrapy.cfg则是爬虫的配置文件。然后执行新建爬虫的命令:

输出为:

不难发现,genspider命令就是创建一个名为DoubanSpider的新爬虫脚本,这个爬虫对应的域名为douban.com。在输出中发现了一个名为basic的模板,这其实是Scrapy的爬虫模板。进入DoubanSpider.py中查看(见图1-8)。

■ 图1-8DoubanSpider.py

可见它继承了 scrapy.Spider 类,其中还有一些类属性和方法。name用来标识爬虫。它在项目中是唯一的,每一个爬虫有一个独特的name。parse是一个处理 response 的方法,在Scrapy中,response 由每个 request 下载生成。作为parse方法的参数,response是一个 TextResponse 的实例,其中保存了页面的内容。start_urls列表是一个代替start_requests方法的捷径,所谓的start_requests方法,顾名思义,其任务就是从 url生成 scrapy.Request 对象,作为爬虫的初始请求。之后会遇到的Scrapy爬虫基本都有着类似这样的结构。

为了定制Scrapy爬虫,要根据自己的需求定义不同的Item,例如,创建一个针对页面中所有正文文字的爬虫,将Items.py中的内容改写为:

之后编写DoubanSpider.py:

这个爬虫会先进入start_urls列表中的页面(在这个例子中就是豆瓣网的首页),收集信息完毕后就会停止。response.xpath('//a/text').extract这行语句将从response(其中保存着网页信息)中使用xpath语句抽取出所有“a”标签的文字内容(text)。下一句会将它们逐一打印。

运行爬虫的命令是:

其中,spidername是爬虫的名称,即爬虫类中的name属性。

程序运行并进行爬取后,可以看到Scrapy爬取时的Log输出,通过Log内容可以看到爬取的进度以及结果。由于爬取目标网站的一些反爬措施,如限制USER_AGENT,因此在允信之前可能还需要在setting.py中修改一些配置,如USER_AGENT等。

值得一提的是,除了简单的scrapy.Spider,Scrapy还提供了诸如CrawlSpider、csvfeed等爬虫模板,其中CrawlSpider是最为常用的。另外,Scrapy的Pipeline和Middleware都支持扩展,配合主爬虫类使用将取得很流畅的抓取和调试体验。

当然,Python爬虫框架当然不止Scrapy一种,在其他诸多爬虫框架中,还值得一提的是PySpider、Portia等。PySpider是一个“国产”的框架,由国内开发者编写,拥有一个可视化的Web界面来编写调试脚本,使得用户可以进行诸多其他操作,如执行或停止程序、监控执行状态、查看活动历史等。除了Python,JAVA语言也常常用于爬虫的开发,比较常见的爬虫框架包括Nutch、Heritrix、WebMagic、Gecco等。爬虫框架流行的原因,就在于开发者需要“多、快、好、省”地完成一些任务,如爬虫的URL管理、线程池之类的模块,如果自己从零做起,势必需要一段时间的实验、调试和修改。爬虫框架将一些“底层”的事务预先做好,开发者只需要将注意力放在爬虫本身的业务逻辑和功能开发上。有兴趣的读者可以继续了解如PySpider这样的新框架。

02

参考书籍

↑ 点击图片官方旗舰店优惠购书 ↑

Python爬虫案例实战(微课视频版)

提供源码、380分钟视频,基础知识与丰富的Python爬虫实战案例相结合

吕云翔 韩延刚 张扬 主编

谢吉力 杨壮 王渌汀 王志鹏 杨瑞翌 副主编

定价:59.90元

ISBN:9787302633778

出版日期:2023.07.01

内容简介

本书将以Python语言为基础,由浅入深地探讨网络爬虫技术,同时,通过具体的程序编写和实践来帮助读者了解和学习Python爬虫。

本书共包含20个案例,从内容上分为四部分,分别代表不同的爬虫阶段及场景,包括了Python爬虫编写的基础知识,以及对爬虫数据的存储、深入处理和分析。

第一部分爬虫基础篇。该部分简单介绍了爬虫的基本知识,便于读者掌握相关知识,对爬虫有基本的认识。

第二部分实战基础篇(9个案例)。该部分既有简单、容易实现的入门案例,也有改进的进阶案例。丰富的内容包括爬虫常用的多种工具及方法,覆盖了爬虫的请求、解析、清洗、入库等全部常用流程,是入门实践的最佳选择。

第三部分框架应用篇(5个案例)。该部分内容从爬虫框架的角度出发,介绍了几个常用框架的案例,重点介绍了Scrapy框架,以及基于Python 3后的新特性的框架,如Gain和PySpider等,同时也对高并发应用场景下的异步爬虫做了案例解析,是不容错过的精彩内容。

第四部分爬虫应用场景及数据处理篇(6个案例)。该部分内容从实际应用的角度出发,通过不同的案例展示了爬虫爬取的数据的应用场景以及针对爬虫数据的数据分析,可以让读者体会到爬虫在不同场景上的应用,从另一个角度展示了爬虫的魅力,可以给读者带来一些新的思考。

这四部分由浅入深地介绍了爬虫常用的方法和工具,以及对爬虫数据处理的应用和实现。但需要注意的是,爬虫的技术栈不仅仅包含这几部分,而且在实际工作中的细分方法也不尽相同。本书只是对目前爬虫技术中最为常见的一些知识点,用案例的形式进行了分类和讲解,而更多的应用也值得读者在掌握一定的基础技能后进一步探索。



Tags:Scrapy   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
如何使用Python Scrapy库提升数据采集速度?
Scrapy是一个强大而灵活的Python爬虫框架,被广泛用于数据采集、网站抓取和网络爬虫开发。本文将深入介绍Scrapy的功能和用法,并提供丰富的示例代码,帮助更好地理解和应用。一、...【详细内容】
2023-10-22  Search: Scrapy  点击:(107)  评论:(0)  加入收藏
掌握Scrapy框架,轻松实现网页自动化爬取
爬虫框架:Scrapy01爬虫框架:Scrapy按照官方的说法,Scrapy是一个“为了爬取网站数据,提取结构性数据而编写的Python应用框架,可以应用在包括数据挖掘、信息处理或存储历史数据等各...【详细内容】
2023-09-10  Search: Scrapy  点击:(191)  评论:(0)  加入收藏
python爬虫之Scrapy框架,基本介绍使用以及用框架下载图片案例
一、Scrapy框架简介Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓...【详细内容】
2022-11-16  Search: Scrapy  点击:(544)  评论:(0)  加入收藏
2022新版Scrapy打造搜索引擎 畅销4年的Python分布式爬虫
Android应用自适应多分辨率解决方案2022新版Scrapy打造搜索引擎 畅销4年的Python分布式爬虫download:https://www.51xuebc.com/thread-494-1-1.html1.第一步是创建多个布局文...【详细内容】
2022-10-07  Search: Scrapy  点击:(376)  评论:(0)  加入收藏
scrapy翻页爬取--scrapy爬虫案例
今天我们仍旧利用scrapy框架实现自动翻页爬取数据,爬取诗词胖排行榜( https://www.shicimingju.com/paiming)中的标题。1.新建文件夹scrapy starproject 文件名(wallpaper)2.新建...【详细内容】
2021-10-21  Search: Scrapy  点击:(537)  评论:(0)  加入收藏
终于有人把Scrapy爬虫框架讲明白了
导读:Scrapy由Python语言编写,是一个快速、高层次的屏幕抓取和Web抓取框架,用于抓取Web站点并从页面中提取出结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试...【详细内容】
2021-04-13  Search: Scrapy  点击:(770)  评论:(0)  加入收藏
Scrapy 爬虫完整案例-基础篇
1 Scrapy 爬虫完整案例-基础篇1.1 Scrapy 爬虫案例一Scrapy 爬虫案例:爬取腾讯网招聘信息案例步骤:第一步:创建项目。在 dos下切换到目录D:\爬虫_script\scrapy_project 新建一...【详细内容】
2021-04-12  Search: Scrapy  点击:(544)  评论:(0)  加入收藏
Scrapy框架初探
Scrapy基本介绍scrapy是一种用于爬虫的框架,并提供了相当成熟的模板,大大减少了程序员在编写爬虫时的劳动需要。Command line tool & Project structure使用scrapy需要先创建s...【详细内容】
2020-07-07  Search: Scrapy  点击:(453)  评论:(0)  加入收藏
Python爬虫框架scrapy爬取腾讯招聘
创建项目scrapy startproject tencent编写items.py写class TencentItemimport scrapyclass TencentItem(scrapy.Item):# define the fields for your item here like:# 职...【详细内容】
2019-08-16  Search: Scrapy  点击:(994)  评论:(0)  加入收藏
浅析scrapy与scrapy_redis区别
近在工作中写了很多 scrapy_redis 分布式爬虫,但是回想 scrapy 与 scrapy_redis 两者区别的时候,竟然,思维只是局限在了应用方面,于是乎,搜索了很多相关文章介绍,这才搞懂内部实现...【详细内容】
2019-08-02  Search: Scrapy  点击:(1153)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(52)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(67)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(84)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(86)  评论:(0)  加入收藏
站内最新
站内热门
站内头条