Python Scrapy 框架简单介绍
作者:凌冰_ 发布时间:2021-09-18 14:51:48
一、Scrapy是什么
Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,可以灵活完成各种需求。我们只需要定制开发几个模块就可以轻松实现一个爬虫。
Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。
二、Scrapy优点
1、速度快
2、实现大批量爬取
三、Scrapy爬虫框架的架构
(1) Scrapy有五个部分组件组成:
中 > 引擎Scrapy Engine:用来处理整个系统的数据流处理、触发事务,是整个框架的核心
上 > 调度器Scheduler:用来接受引擎发过来的请求并加入队列中,并在引擎再次请求的时候提供给引擎。
左 > 管道item pipeline:负责处理由蜘蛛从网页中抽取的项目,它的主要任务是清洗、验证和存储数据。
下 > 爬虫器(爬虫组件) Spiders:其内定义了爬取的逻辑和网页的解析规则,它主要负责解析响应并生成提取结果和新的请求。
Spider Middlewares(Spiders中间件):位于引擎和蜘蛛之间的钩子框架,主要工作是处理蜘蛛输入的响应和输出的结果及新的请求。
右 > 下载器 Downloader:用于下载网页内容,并将网页内容返回给Spiders爬虫器。
Downloader Middlewares(下载器中间件):位于引擎和下载器之间的钩子框架,主要是处理引擎与下载器之间的请求及响应。
(2) Scrapy数据流机制:
引擎Scrapy Engine : C位,不用做事,接收任务,分发任务。
爬虫器Spiders :
1.确认目标url,根据这个url构造一个request对象,交给引擎
4.接收了来自引擎的response,进行解析,解析完毕,把结果给引擎
解析结果分为2种
--(1)如果提取出来的是url,就把所有的步骤重头再走一遍
--(2)如果是需要进行保存的数据data调度器Scheduler:
2.接收了来自引擎的request对象,进行一个排序,把排序之后的结果交给引擎(假设有100个request对象,安装调度,安排谁先谁后).下载器Downloader:
3.接收了来自经过了排序之后的引擎的request对象,发送网络请求获取响应对象response,交给引擎.管道item pipeline:
5.接收了来自引擎的数据data,进行保存.
通过多个组件的相互协作、不同组件完成工作的不同、组件很好地支持异步处理,scrapy 最大限度地利用了网络带宽,大大提高了数据爬取和处理的效率。
四、scrapy创建项目
(1) 爬虫项目
scrapy startproject 爬虫项目名
(2) 爬虫任务
1. cd 到项目的根目录
2. scrapy genspider 爬虫任务名称 域的范围.com
(3)运行scrapy爬虫
scrapy crawl 爬虫任务名称
(4) Scrapy创建结构图
各个文件的功能描述如下:
scrapy.cfg:它是 Scrapy 项目的配置文件,其内定义了项目的配置文件路径、部署相关信息等内容。
items.py:它定义 Item 数据结构,所有的 Item 的定义都可以放这里。
pipelines.py:它定义 Item Pipeline 的实现,所有的 Item Pipeline 的实现都可以放这里。
settings.py:它定义项目的全局配置。
middlewares.py:它定义 Spider Middlewares 和 Downloader Middlewares 的实现。
spiders:其内包含一个个 Spider 的实现,每个 Spider 都有一个文件。
来源:https://blog.csdn.net/hlx20080808/article/details/130686171
猜你喜欢
- 在近日的写Web程序时用到了Access的模糊查询,在Acces里写代码怎么也找不到记录后来才起来原来Acess和SqlServer的模糊查
- 一、简介是一个 python 内置包,不需要额外安装即可使用urllib 是 Python 标准库中用于网络请求的库,内置四个模块,分别是u
- 一、模型参数的保存和加载 torch.save(module.state_dict(), path):使用module.state
- 如何生成任意n阶的三对角矩阵数学作业要求实现共轭梯度法的算法。题目中的矩阵A是n=400/500/600的三对角矩阵。在网上查阅资料未果后,
- 提取python字符串括号中的内容一些数据按字符串保存,如str1 = '(1, 0.123) (2, 0.234)',当我
- JavaScript游戏开发之键盘控制层的移动截图:<html> <head> <meta http-equi
- 代码如下:--执行顺序 From Where Select select * from (select sal as salary,comm
- 1.依次安装python2和python3,并添加到系统环境变量中2.找到python3的安装目录,一般在C:\Users\Administ
- 前言:由于公司使用钉钉,之前告警都是使用邮箱,但是这种协同效率比较低,所以调用钉钉机器人来实现实时告警。创建机器人:创建钉钉群,然后添加群机
- 1. 什么是XSLT 大家可能听说过XSL(eXtensible Stylesheet Language),XSL和我们这里说的XSLT从狭
- 之前一直使用hdfs的命令进行hdfs操作,比如:hdfs dfs -ls /user/spark/hdfs dfs -get /user/
- 我经常需要用Python与solr进行异步请求工作。这里有段代码阻塞在Solr http请求上, 直到第一个完成才会执行第二个请
- 监控中,通常要使用图片更直观的看出集群的运行状况。以下是一个简单的demo,通过rrdtool生成动态的图片。Python3, tornad
- 功能描述:1)使用tkinter设计程序界面;2)调用Windows API函数实现录音机和音乐播放器。参考代码:运行界面:总结以上所述是小
- 现在很多以内容为核心的网站上都在文章底部添加了社会化分享按钮,能让浏览用户在发现一篇有价值的文章时,可以通过社会化网络快速分享给自己的好友,
- python逆序的三位数程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入7
- 本文实例讲述了Python网络编程之TCP套接字简单用法。分享给大家供大家参考,具体如下:上学期学的计算机网络,因为之前还未学习python
- 关于采集-防采集的我想大家都很清楚。这个就不多说,采集最终还是从页面源代码入手,所以只要没有规律想采集就难!由于一天自己在策划某个网站的时候
- mysql -uusername -pyourpassword yourdatabasename < c:\sqlfile.sql其中
- 本文实例讲述了彻底删除thinkphp3.1案例blog标签的方法。分享给大家供大家参考。具体方法如下:thinkphp3.1框架中的案例b