欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

程序员文章站 2022-03-17 11:45:02
为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花! 数据流 Scrapy中的数据流由执行引擎控制,其过程如下: Engine从Spider获取第一个需要爬取URL(s)。 Engine用Scheduler调度Requests,并向Scheduler请求下一个要爬取的URL。 Sch ......

为什么要学习Scrapy,理由只有一个,那就是免费,一分钱都不用花!

听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

 

听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

 

听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

 

数据流

Scrapy中的数据流由执行引擎控制,其过程如下:

  1. Engine从Spider获取第一个需要爬取URL(s)。
  2. Engine用Scheduler调度Requests,并向Scheduler请求下一个要爬取的URL。
  3. Scheduler返回下一个要爬取的URL给Engine。
  4. Engine将URL通过Downloader middlewares转发给Downloader。
  5. 一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过Downloader middlewares发送给Engine。
  6. 引擎从Downloader中接收到Response并通过Spider middlewares发送给Spider处理。
  7. Spider处理Response并返回爬取到的Item及新的Request给Engine。
  8. Engine将爬取到的Item给Item Pipeline,然后将Request给Scheduler。
  9. 从第一步开始重复这个流程,直到Scheduler中没有更多的URLs。
听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

 

听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

 

老张觉得自己聪明了。

所谓同步异步,只是对于水壶而言。普通水壶,同步;响水壶,异步。虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

所谓阻塞非阻塞,仅仅对于老张而言。立等的老张,阻塞;看电视的老张,非阻塞。情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

 

编写第一个爬虫

Spider是用户编写用于从单个网站(或者一些网站)爬取数据的类。其包含了一个用于下载的初始URL,以及如何跟进网页中的链接以及如何分析页面中的内容的方法。

以下为我们的第一个Spider代码,保存在 tutorial/spiders 目录下的 quotes_spider.py文件中:

听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

 

为了创建一个Spider,你必须继承 scrapy.Spider 类, 且定义以下三个属性:

  1. name: 用于区别Spider。 该名字必须是唯一的,您不可以为不同的Spider设定相同的名字。
  2. start_urls: 包含了Spider在启动时进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。
  3. parse() 是spider的一个方法。 被调用时,每个初始URL完成下载后生成的Response 对象将会作为唯一的参数传递给该函数。 该方法负责解析返回的数据(response data),提取数据以及生成需要进一步处理的URL的 Request 对象。

运行我们的爬虫

进入项目的根目录,执行下列命令启动spider:

听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

 

再次运行这个爬虫,你将在日志里看到被提取出的数据:

听说你想学爬虫?Scrapy快速入门!给我五分钟,包你学会爬虫!

 

下一步

系列写到这里,组里对下一步的计划产生了分歧,本人的意思是系列已经接近尾声了,可领导的意思是,连载可以正式开始了! What? 这不能忍啊!所以我立即做了一个艰难的决定,连载正式开始!详情下回分解,再见!

进群:125240963   即可获取数十本PDF哦!