千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 20天学会爬虫之Scrapy框架介绍

20天学会爬虫之Scrapy框架介绍

来源:千锋教育
发布人:qyf
时间: 2022-09-19 17:49:00 1663580940

  什么是Scrapy

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

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

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

Picture

  Scrapy的安装

  Windows系统:

  pip install scrapy

  如果安装过程中出错

  错误信息如下:

Picture(1)

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

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

Picture(2)

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

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

  然后再次执行:pip install scrapy

  Linux和mac系统直接:pip3 install scrapy

  scrapy工作流程

Picture(3)

  Scrapy工作流程的图:

Picture(4)

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

  其中:

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

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

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

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

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

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

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

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

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

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

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

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

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

  每部分的具体作用

Picture(5)

  scrapy常用命令

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

Picture(6)

  其中:

  全局命令:

  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”目录中创建爬虫项目,如图所示。

Picture(7)

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

Picture(8)

  创建之后的爬虫项目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目录

Picture(9)

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

Picture(10)

  编写爬虫

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

Picture(11)

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

Picture(12)

  保存数据

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

  定义一个管道类

  重写管道类的process_item方法

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

Picture(13)

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

  ITEM_PIPELINES = {

  'myproject.pipelines.MyprojectPipeline': 400,

  }

  配置项中键为使用的管道类,管道类使用.进行分割,第一个为项目目录,第二个为文件,第三个为定义的管道类。

  配置项中值为管道的使用顺序,设置的数值约小越优先执行,该值一般设置为1000以内。

  运行scrapy

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

  示例:scrapy crawl qiubai

Picture(14)

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

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT