Python爬虫框架Scrapy简介

在爬虫的路上,学习scrapy是一个必不可少的环节。也许有好多朋友此时此刻也正在接触并学习scrapy,那么很好,我们一起学习。开始接触scrapy的朋友可能会有些疑惑,毕竟是一个框架,上来不知从何学起。从本篇起,博主将开启scrapy学习的系列,分享如何快速入门scrapy并熟练使用它。

本篇作为第一篇,主要介绍和了解scrapy,在结尾会向大家推荐一本关于学习scrapy的书,以及获取的方式。

为什么要用爬虫框架?

如果你对爬虫的基础知识有了一定了解的话,那么是时候该了解一下爬虫框架了。那么为什么要使用爬虫框架?

  • 学习框架的根本是学习一种编程思想,而不应该仅仅局限于是如何使用它。从了解到掌握一种框架,其实是对一种思想理解的过程。
  • 框架也给我们的开发带来了极大的方便。许多条条框框都已经是写好了的,并不需要我们重复造轮子,我们只需要根据自己的需求定制自己要实现的功能就好了,大大减少了工作量。
  • 参考并学习优秀的框架代码,提升编程代码能力。

博主当时是根据这几点来进行爬虫框架的学习的,但是切记核心目标是掌握一种框架思想,一种框架的能力,掌握了这种思想你才能更好的去使用它,甚至扩展它。

scrapy框架的介绍

比较流行的爬虫的框架有scrapy和pyspider,但是被大家所钟爱的我想非scrapy莫属了。scrapy是一个开源的高级爬虫框架,我们可以称它为"scrapy语言"。它使用python编写,用于爬取网页,提取结构性数据,并可将抓取得结构性数据较好的应用于数据分析和数据挖掘。scrapy有以下的一些特点:

  • scrapy基于事件的机制,利用twisted的设计实现了非阻塞的异步操作。这相比于传统的阻塞式请求,极大的提高了CPU的使用率,以及爬取效率。
  • 配置简单,可以简单的通过设置一行代码实现复杂功能。
  • 可拓展,插件丰富,比如分布式scrapy + redis、爬虫可视化等插件。
  • 解析方便易用,scrapy封装了xpath等解析器,提供了更方便更高级的selector构造器,可有效的处理破损的HTML代码和编码。

scrapy和requests+bs用哪个好?

有的朋友问了,为什么要使用scrapy,不使用不行吗?用resquests + beautifulsoup组合难道不能完成吗?

不用纠结,根据自己方便来。resquests + beautifulsoup当然可以了,requests + 任何解析器都行,都是非常好的组合。这样用的优点是我们可以灵活的写我们自己的代码,不必拘泥于固定模式。对于使用固定的框架有时候不一定用起来方便,比如scrapy对于反反爬的处理并没有很完善,好多时候也要自己来解决。

但是对于一些中小型的爬虫任务来讲,scrapy确实是非常好的选择,它避免了我们来写一些重复的代码,并且有着出色的性能。我们自己写代码的时候,比如为了提高爬取效率,每次都自己码多线程或异步等代码,大大浪费了开发时间。这时候使用已经写好的框架是再好不过的选择了,我们只要简单的写写解析规则和pipeline就好了。那么具体哪些是需要我们做的呢?看看下面这个图就明白了。

因此,对于该用哪个,根据个人需求和喜好决定。但是至于学习的先后顺序,建议先学学resquests + beautifulsoup,然后再接触Scrapy效果可能会更好些,仅供参考。

scrapy的架构

在学习Scrapy之前,我们需要了解Scrapy的架构,明白这个架构对学习scrapy至关重要。

Scrapy官方文档的图片

下面的描述引自官方doc文档(在此引用),讲的很清楚明白,对照这个图看就能明白。

组件

Scrapy Engine
引擎负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件。 详细内容查看下面的数据流(Data Flow)部分。

调度器(Scheduler)
调度器从引擎接受request并将他们入队,以便之后引擎请求他们时提供给引擎。

下载器(Downloader)
下载器负责获取页面数据并提供给引擎,而后提供给spider。

Spiders
Spider是Scrapy用户编写用于分析response并提取item(即获取到的item)或额外跟进的URL的类。 每个spider负责处理一个特定(或一些)网站。

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的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python爬虫框架之Scrapy中Spider的用法

    Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item).换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方. 对spider来说,爬取的循环类似下文: 1.以初始的URL初始化Request,并设置回调函数.当该request下载完毕并返回时,将生成response,并作为参数传给该回调函数.spider中初始的request是通过调用start_requests()来获取的.sta

  • python爬虫scrapy框架之增量式爬虫的示例代码

    scrapy框架之增量式爬虫 一 .增量式爬虫 什么时候使用增量式爬虫: 增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础上更新一些新的数据.如一些电影网站会实时更新最近热门的电影.那么,当我们在爬虫的过程中遇到这些情况时,我们是不是应该定期的更新程序以爬取到更新的新数据?那么,增量式爬虫就可以帮助我们来实现 二 .增量式爬虫 概念: 通过爬虫程序检测某网站数据更新的情况,这样就能爬取到该网站更新出来的数据 如何进行增量式爬取工作: 在发送请求之前判断这个URL之前是不是

  • python爬虫框架scrapy代理中间件掌握学习教程

    目录 代理的使用场景 使用 HttpProxyMiddleware 中间件 代理的使用场景 编写爬虫代码的程序员,永远绕不开就是使用代理,在编码过程中,你会碰到如下情形: 网络不好,需要代理: 目标站点国内访问不了,需要代理: 网站封杀了你的 IP,需要代理. 使用 HttpProxyMiddleware 中间件 本次的测试站点依旧使用 http://httpbin.org/,通过访问 http://httpbin.org/ip 可以获取当前请求的 IP 地址. HttpProxyMiddlew

  • python爬虫框架Scrapy基本应用学习教程

    在正式编写爬虫案例前,先对 scrapy 进行一下系统的学习. scrapy 安装与简单运行 使用命令 pip install scrapy 进行安装,成功之后,还需要随手收藏几个网址,以便于后续学习使用. scrapy 官网:https://scrapy.org scrapy 文档:https://doc.scrapy.org/en/latest/intro/tutorial.html scrapy 更新日志:https://docs.scrapy.org/en/latest/news.htm

  • Python爬虫基础之简单说一下scrapy的框架结构

    scrapy 框架结构 思考 scrapy 为什么是框架而不是库? scrapy是如何工作的? 项目结构 在开始爬取之前,必须创建一个新的Scrapy项目.进入您打算存储代码的目录中,运行下列命令: 注意:创建项目时,会在当前目录下新建爬虫项目的目录. 这些文件分别是: scrapy.cfg:项目的配置文件 quotes/:该项目的python模块.之后您将在此加入代码 quotes/items.py:项目中的item文件 quotes/middlewares.py:爬虫中间件.下载中间件(处理

  • Python爬虫框架-scrapy的使用

    Scrapy Scrapy是纯python实现的一个为了爬取网站数据.提取结构性数据而编写的应用框架. Scrapy使用了Twisted异步网络框架来处理网络通讯,可以加快我们的下载速度,并且包含了各种中间件接口,可以灵活的完成各种需求 1.安装 sudo pip3 install scrapy 2.认识scrapy框架 2.1 scrapy架构图 Scrapy Engine(引擎): 负责Spider.ItemPipeline.Downloader.Scheduler中间的通讯,信号.数据传递

  • python Scrapy爬虫框架的使用

    导读:如何使用scrapy框架实现爬虫的4步曲?什么是CrawSpider模板?如何设置下载中间件?如何实现Scrapyd远程部署和监控?想要了解更多,下面让我们来看一下如何具体实现吧! Scrapy安装(mac) pip install scrapy 注意:不要使用commandlinetools自带的python进行安装,不然可能报架构错误:用brew下载的python进行安装. Scrapy实现爬虫 新建爬虫 scrapy startproject demoSpider,demoSpide

  • python爬虫框架scrapy下载中间件的编写方法

    目录 下载中间件 process_request process_response process_exception 其它 下载中间件 在每一个scrapy工程中都有一个名为 middlewares.py 的文件,这个就是中间件文件其中下载中间件的类为 XxxDownloaderMiddleware其中有这么几个方法 def process_request(self, request, spider): return None def process_response(self, reques

  • Python爬虫教程使用Scrapy框架爬取小说代码示例

    目录 Scrapy框架简单介绍 创建Scrapy项目 创建Spider爬虫 Spider爬虫提取数据 items.py代码定义字段 fiction.py代码提取数据 pipelines.py代码保存数据 settings.py代码启动爬虫 结果展示 Scrapy框架简单介绍 Scrapy框架是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,是提取结构性数据而编写的应用框架,其架构清晰,模块之间的耦合程度低,可扩展性极强,我们只需要少量的代码就能够快速抓取数据. 其框架如下图

  • Python爬虫基础讲解之scrapy框架

    网络爬虫 网络爬虫是指在互联网上自动爬取网站内容信息的程序,也被称作网络蜘蛛或网络机器人.大型的爬虫程序被广泛应用于搜索引擎.数据挖掘等领域,个人用户或企业也可以利用爬虫收集对自身有价值的数据. 一个网络爬虫程序的基本执行流程可以总结三个过程:请求数据,解析数据,保存数据 数据请求 请求的数据除了普通的HTML之外,还有json数据.字符串数据.图片.视频.音频等. 解析数据 当一个数据下载完成后,对数据中的内容进行分析,并提取出需要的数据,提取到的数据可以以多种形式保存起来,数据的格式有非常多

  • python爬虫之scrapy框架详解

    1.在pycharm下安装scrapy函数库 2.将安装好scrapy函数库下的路径配置到系统path的环境变量中 3.打开cmd终端输入:scrapy.exe检查是否安装成功 4.创建一个项目:scrapy startproject 项目名字 5.cd进入该目录下,创建一个spider:scrapy genspider 项目名字 网址 6.编辑settings.py文件中的USER_AGENT选项为正常的浏览器头部 7.执行这个spider:scrapy crawl 项目名字 8.如果遇到因p

  • python爬虫scrapy框架的梨视频案例解析

    之前我们使用lxml对梨视频网站中的视频进行了下载,感兴趣的朋友点击查看吧. 下面我用scrapy框架对梨视频网站中的视频标题和视频页中对视频的描述进行爬取 分析:我们要爬取的内容并不在同一个页面,视频描述内容需要我们点开视频,跳转到新的url中才能获取,我们就不能在一个方法中去解析我们需要的不同内容 1.爬虫文件 这里我们可以仿照爬虫文件中的parse方法,写一个新的parse方法,可以将新的url的响应对象传给这个新的parse方法 如果需要在不同的parse方法中使用同一个item对象,可

随机推荐