python的scrapy框架,scrapy创建爬虫
本文介绍了Python爬虫框架Scrapy,对大家的学习或工作有一定的参考价值。有需要的朋友下面和边肖一起学习。
学习scrapy是爬行动物路上必不可少的一环。也许此刻有很多朋友也在接触和学习scrapy,那么好,我们一起学习吧。开始接触scrapy的朋友可能会有些疑惑。毕竟是框架,不知道从何入手。从这篇文章开始,博主将开启scrapy学习系列,分享如何快速入门scrapy并熟练使用。
作为第一篇,本文主要介绍和了解scrapy。最后给大家推荐一本关于学习scrapy的书,以及如何获得。
为什么要用爬虫框架?
如果你了解爬虫的基础知识,那就该了解爬虫框架了。那么为什么要使用爬虫框架呢?
学习框架的基础是学习一种编程思想,不应该局限于如何使用。学习掌握一个框架,其实就是理解一个思想的过程。框架也给我们的开发带来了很大的便利。很多规章制度早就写好了,不需要我们反复造轮子。我们只需要根据自己的需求定制想要实现的功能,大大减少了工作量。并学习优秀的框架代码,提高编程代码的能力。当时博主是根据这几点来研究爬虫框架的,但是记住核心目标是掌握一个框架思想,一个框架能力。只有掌握了这个思路,你才能更好地运用它,甚至拓展它。
scrapy框架的介绍
流行的爬虫框架有scrapy和pyspider,但我认为大家都喜欢的是scrapy。Scrapy是一个开源的高级爬虫框架,我们可以称之为‘scrapy语言’。它是用python写的,用于抓取网页,提取结构化数据,可以应用于数据分析和数据挖掘。Scrapy有以下特点:
Scrapy基于事件机制,使用twisted设计实现无阻塞异步操作。与传统的阻塞请求相比,这大大提高了CPU利用率和爬行效率。配置简单,复杂功能只需设置一行代码即可实现。可扩展,插件丰富,如分布式scrapy redis,爬虫可视化等插件。解析方便易用。scrapy封装了xpath等解析器,提供了更方便、更高级的选择器构造器,可以有效处理破碎的HTML代码和代码。
scrapy和requests+bs用哪个好?
有朋友问,为什么要用scrapy?没有它就不行吗?不能用resquests beautifulsoup完成组合吗?
别急,根据自己方便来。当然,Quests和requests,任何解析器,都是一个很好的组合。这样做的好处是,我们可以灵活地编写自己的代码,而不是拘泥于固定的模式。有时候使用固定的框架并不总是很方便。比如scrapy对防爬的处理并不完美,很多时候还得自己解决。
但是对于一些中小型的爬虫任务来说,scrapy确实是一个非常好的选择,它避免了我们去写一些重复的代码,而且它的性能非常优秀。比如我们自己写代码的时候,为了提高抓取效率,总是自己写多线程或者异步代码之类的代码,极大的浪费了开发时间。这个时候,使用已经写好的框架是最好的选择。我们只需要简单地编写解析规则和管道。那么我们到底需要做什么?看看下面这张图。
所以用哪一个,要根据个人需求和喜好来决定。不过关于学习顺序,建议先学习resquests beautifulsoup,再接触Scrapy,可能更好,仅供参考。
scrapy的架构
在学习scrapy之前,我们需要了解Scrapy的架构,明白这个架构对于学习Scrapy是必不可少的。
杂乱的官方文件的照片
以下描述引自官方doc文档(此处引用),非常清楚。看这个图就明白了。
组件
杂乱的发动机
引擎负责控制系统中所有组件之间的数据流的流动,并在相应的动作发生时触发事件。详情参见下面的数据流部分。
调度程序(调度程序)
调度程序接受来自引擎的请求,并对它们进行排队,以便在引擎稍后请求它们时可以将它们提供给引擎。
下载器
下载器负责获取页面数据并提供给引擎,再提供给蜘蛛。
蜘蛛
Spider是Scrapy用户编写的一个类,用于分析响应,提取物品(即被收购的物品)或URL进行额外跟进。每个蜘蛛负责处理特定的网站(或多个网站)。
/p>
Item Pipeline
Item Pipeline负责处理被spider提取出来的item。典型的处理有清理、 验证及持久化(例如存取到数据库中)。
下载器中间件(Downloader middlewares)
下载器中间件是在引擎及下载器之间的特定钩子(specific hook),处理Downloader传递给引擎的response。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。
Spider中间件(Spider middlewares)
Spider中间件是在引擎及Spider之间的特定钩子(specific hook),处理spider的输入(response)和输出(items及requests)。 其提供了一个简便的机制,通过插入自定义代码来扩展Scrapy功能。
数据流过程
- 引擎打开一个网站(open a domain),找到处理该网站的Spider并向该spider请求第一个要爬取的URL(s)。
- 引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。
- 引擎向调度器请求下一个要爬取的URL。
- 调度器返回下一个要爬取的URL给引擎,引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)。
- 一旦页面下载完毕,下载器生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给引擎。
- 引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理。
- Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。
- 引擎将(Spider返回的)爬取到的Item给Item Pipeline,将(Spider返回的)Request给调度器。
- (从第二步)重复直到调度器中没有更多地request,引擎关闭该网站。
到此这篇关于Python爬虫框架Scrapy的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。