分享

Python爬虫之Scrapy框架介绍

 网摘文苑 2022-11-25 发布于新疆

什么是Scrapy

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。

框架就是将平常写爬虫的request (异步调度和处理)、下载器(多线程的 Downloader)、解析器(selector)和 twisted(异步处理)封装到了一起,够成了框架。而且使用起来更加方便,爬取速度更快。

Scrapy框架的应用领域有很多,例如网络爬虫开发、数据挖掘、自动化测试等,其最初是为了页面抓取(网络抓取)所设计的,也可以应用在获取API所返回的数据或者通用的网络爬虫。

官方网址是https:///

图片

Scrapy的安装

Windows系统:

pip install scrapy

如果安装过程中出错

错误信息如下:

图片

则需要安装Microsoft Visual C++14,如果报错不是Microsoft Visual C++14比如Microsoft Visual C++15则对应安装即可。

如果安装过程中过提示安装Twisted安装失败,则需要来到这个网址:https://www.lfd./~gohlke/pythonlibs/自行下载wheel文件,

图片

可能需要下载的是:pyOpenSSL、Twisted、PyWin32,可以根据安装时,报错的提示信息有针对性的下载。

下载之后放到一个固定的目录中,进入下载的目录。执行 pip3 install xxxxxx.whl (注意xxxxxx代表的是你下载的wheel的名字)

然后再次执行:pip install scrapy

Linux和mac系统直接:pip3 install scrapy

scrapy工作流程

图片

Scrapy工作流程的图:

图片

在图中,Scrapy引擎是架构的核心部分,调度器、管道、下载器和Spiders等组件都通过引擎来调控。在Scrapy引擎和下载器中间通过中间件传递信息,在下载中间件中,可以插入自定义代码扩展Scrapy的功能,例如实现IP池的应用。引擎和Spiders之间也是通过爬虫中间件来传递信息,同样可以自定义扩展功能。

其中:

Scrapy引擎负责控制整个数据处理流程,处于整个Scrapy框架中心位置,协调调度器、管道、中间件、下载器、爬虫。

调度器负责存储等待爬取的网址,确定网址优先级,相当于一个队列存储,同时也会过滤一些重复的网址。

下载器实现对等待爬取的网页资源进行高速下载,该组件通过网络进行大量数据传输,下载对应的网页资源后将数据传递给Scrapy引擎,再由引擎传递给爬虫处理。

下载中间件用于处理下载器与Scrapy引擎之间的通信,自定义代码可以轻松扩展Scrapy框架的功能

Spiders是实现Scrapy框架爬虫的核心部分。每个爬虫负责一个或多个指定的网站。爬虫组件负责接收Scrapy引擎中的Response响应,接收到响应后分析处理,提取对应重要信息

爬虫中间件是处理爬虫组件和Scrapy引擎之间通信的组件,可以自定义代码扩展Scrapy功能

管道用于接收从爬虫组件中提取的管道,接收到后进行清洗、验证、存储等系列操作

因此其流程可以描述如下:

爬虫中起始的url构造成request对象-->爬虫中间件-->引擎-->调度器

调度器把request-->引擎-->下载中间件--->下载器

下载器发送请求,获取response响应---->下载中间件---->引擎--->爬虫中间件--->爬虫

爬虫提取url地址,组装成request对象---->爬虫中间件--->引擎--->调度器,重复步骤2

爬虫提取数据--->引擎--->管道处理和保存数据

每部分的具体作用

图片

scrapy常用命令

scrapy后面可以跟不同的命令,可以使用scrapy --help进行查看,Scrapy框架中命令分为全局命令和项目命令,全局命令不需要进入Scrapy项目即可在全局中直接运行,项目命令必须在Scrapy项目中才可以运行。

图片

其中:

全局命令

fetch命令是用来检查spider下载页面的方式

runspider命令通过Scrapy中的runspider命令可以直接运行一个爬虫文件

settings命令是用来获取Scrapy的配置信息。

shell命令可以启动Scrapy的交互终端

version命令用于查看Scrapy的版本信息

项目命令

Scarpy的项目命令主要有bench、check、crawl、edit、genspider、list、parse。Scrapy全局命令可以在项目内外使用,而项目命令只能在Scrapy爬虫项目中使用。

bench命令可以测试本地硬件的性能。

genspider命令可以创建Scrapy爬虫文件,这是一种快速创建爬虫文件的方法

check命令可以实现对爬虫文件的测试

crawl命令可以启动某个爬虫

list命令可以列出当前可使用的爬虫文件

parse命令可以获取指定的URL网址,并使用对应的爬虫文件分析处理

scrapy开发步骤

创建项目:scrapy startproject 爬虫项目名字

生成一个爬虫:scrapy genspider <爬虫名字> <允许爬取的域名>

提取数据:根据网站结构在spider中实现数据采集相关内容

保存数据:使用pipeline进行数据后续处理和保存

创建项目

使用Scrapy创建一个爬虫项目,首先需要进入存储爬虫项目的文件夹,例如在“D:\python_spider”目录中创建爬虫项目,如图所示。

图片

当然如果你是Linux或者mac系统也需要进入存储爬虫项目的文件夹,然后新建项目

图片

创建之后的爬虫项目myproject目录结构如下:

项目名字/

scrapy.cfg:

项目名字/

__init__.py

items.py

pipelines.py

settings.py

spiders/

__init__.py

scrapy.cfg 项目的主配置信息。(真正爬虫相关的配置信息在settings.py文件中)

items.py 设置数据存储模板,用于结构化数据,如:Django的Model

pipelines 数据持久化处理

settings.py 配置文件,如:递归的层数、并发数,延迟下载等

spiders 爬虫目录,如:创建文件,编写爬虫解析规则

生成一个爬虫spider

进入刚才创建的爬虫项目myproject目录

图片

然后执行:scrapy genspider 应用名称 爬取网页的起始url (见下图的3部分)

图片

编写爬虫

在生成一个爬虫执行完毕后,会在项目的spiders中生成一个应用名的py爬虫文件

图片

打开文件进行代码编写,大家看到的是默认的格式,可以在parse方法中完善爬虫代码

图片

保存数据

数据的保存需要使用管道pipline,在pipelines.py文件中定义对数据的操作

定义一个管道类

重写管道类的process_item方法

process_item方法处理完item之后必须返回给引擎

图片

然后在settings.py配置启用管道

ITEM_PIPELINES = {

'myproject.pipelines.MyprojectPipeline': 400,

}

配置项中键为使用的管道类,管道类使用.进行分割,第一个为项目目录,第二个为文件,第三个为定义的管道类。配置项中值为管道的使用顺序,设置的数值约小越优先执行,该值一般设置为1000以内。

运行scrapy

命令:在项目目录下执行scrapy crawl <爬虫名字>

示例:scrapy crawl qiubai

图片

当然本次只是给大家描述了一下爬虫中使用scrapy的基本步骤,20天学会爬虫后面会接连介绍scrapy的使用,敬请期待哦!

图片

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多