针对规模小、抓取数据量小、对抓取速度不比较敏感的爬虫软件, 应用 Requests 能轻轻松松拿下。这种网页爬虫关键作用是抓取网页页面、轻松玩网页页面。假如人们必须抓取网站及其系列产品网上平台,要求网络爬虫具备抓取失败能复盘、爬取速度较高等特点。很显然 Requests 不能完全满足我们的需求。因此,需要一功能更加强大的第三方爬虫框架库 —— Scrapy。学会Scrapy,百分之八九十的爬虫框架都能玩儿转了。

一、Scrapy 的特性

Scrapy 是一个框架。因而,它集一些各功能强大的 python 库的优点于一身。下面列举其一些特性:

HTML, XML源数据 选择及提取 的内置支持

提供了一系列在spider之间共享的可复用的过滤器(即 Item Loaders),对智能处理爬取数据提供了内置支持。

通过 feed导出 提供了多格式(JSON、CSV、XML),多存储后端(FTP、S3、本地文件系统)的内置支持

提供了media pipeline,可以 自动下载 爬取到的数据中的图片(或者其他资源)。

高扩展性。您可以通过使用 signals ,设计好的API(中间件, extensions, pipelines)来定制实现您的功能。

内置的中间件及扩展为下列功能提供了支持:

cookies and session 处理

HTTP 压缩

HTTP 认证

HTTP 缓存

user-agent模拟

robots.txt

爬取深度限制

健壮的编码支持和自动识别,用于处理外文、非标准和错误编码问题

针对多爬虫下性能评估、失败检测,提供了可扩展的 状态收集工具 。

内置 Web service, 使您可以监视及控制您的机器。


二、初探 Scrapy

  1. Scrapy 工程项目详细分析

    Scrapy 新创建工程项目需通过命令行操作。在特定文件夹名称中,开启终端实行以下命令:

    scrapy startproject 项目的名字

    我新建一个名为 scrapy_demo,执行结果如下。

    使用 Pycharm 开启该新项目,让我们会发觉新项目的层次构架及其文档。

    这种文档的功能是:

    scrapy.cfg:工程项目的配置文件,开发设计不用采用。

    scrapy_demo:项目中会有两个同名的文件夹名称。最表层表示 project,里面那个目录代表 module(项目的核心)。

    scrapy_demo/items.py:以字段形式界定中后期必须处理的网络数据。

    scrapy_demo/pipelines.py:提取出来的 Item 对象回到的数据并进行存储。

    scrapy_demo/settings.py:项目的设置文档。可以对网络爬虫进行自定设定,例如挑选深度优先爬取还是广度优先爬取,设置对每个IP的爬虫数,设置每个域名的爬虫数,设置爬虫延时,设置代理等等。

    scrapy_demo/spider: 这个目录储放网页爬虫源代码。

    init.py:python 包要求,对 scrapy 作用不大。

  2. Scrapy 的架构

    Scrapy 好比由许多组件拼装起来的大机器。因此,可以采取从整体到局部的顺序学习 Scrapy。

    Scheduler:调度器。负责接受 Engine 发送过来的 Requests 请求,并将其队列化;

    Item Pipeline:Item Pipeline负责处理被spider提取出来的item。其有典型应用,如清理 HTML 数据、验证爬取的数据(检查 item 包含某些字段)、查重(并丢弃)、爬取数据持久化(存入数据库、写入文件等);

    Scrapy Engine:引擎是 Scrapy 的中枢。它负责控制数据流在系统中所有组件中流动,并在相应动作发生时触发事件;

    Downloader Middlewares:下载中间件是 Engine 和 Downloader 的枢纽。负责处理 Downloader 传递给 Engine 的 responses;它还支持自定义扩展。

    Downloader:负责下载 Engine 发送的所有 Requests 请求,并将其获取到的 responses 回传给 Scrapy Engine;

    Spider middlewares:Spider 中间件是 Engine 和 Spider 的连接桥梁;它支持自定义扩展来处理 Spider 的输入(responses) 以及输出 item 和 requests 给 Engine ;

    Spiders:负责解析 Responses 并提取 Item 字段需要的数据,再将需要跟进的URL提交给引擎,再次进入Scheduler(调度器);

  3. Scrapy 工作机制

    当引擎(Engine) 收到 Spider 发送过来的 url 主入口地址(其实是一个 Request 对象, 因为 Scrapy 内部是用到 Requests 请求库),Engine 会进行初始化操作。

    Engine 请求调度器(Scheduler),让 Scheduler 调度出下一个 url 给 Engine。

    Scheduler 返回下一个 url 给 Engine。

    Engine 将 url通过下载中间件(请求(request)方向)转发给下载器(Downloader)。

    一旦页面下载完毕,Downloader 生成一个该页面的Response,并将其通过下载中间件(返回(response)方向)发送给 Engine

    引擎将从下载器中接收到 Response 发送给Spider处理。

    Spider 处理 Response 并返回爬取到的 Item 及新的 Request 给引擎。

    Engine 将 Spider 返回的爬取到的 Item 转发给Item Pipeline,顺便也将将 Request 给调度器。

    重复(第2步)直到调度器中没有更多地request,引擎关闭该网站。

转载于:https://blog.51cto.com/14059916/2334702

动态IP代理软件有话说:天下爬虫框架皆出Scrapy相关推荐

  1. 动态ip软件基本知识和动态ip代理使用方法扫盲

    一.什么叫动态ip代理电脑软件? 动态ip代理电脑软件是介于电脑浏览器和web集群服务器的一台网络服务器,如果你利用动态ip代理电脑软件上外网访问时,电脑浏览器并不是立即到web网络服务器去取回来网页 ...

  2. 太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案

    一个ip支撑不了整个爬虫项目的运营,因此程序员常需要建立代理ip池或者与第三方代理ip软件打交道.作为优质的代理ip服务商,太阳动态ip代理为您详解使用代理ip常见的几个关键点及其解决方案. IP检验 ...

  3. 网络新手ip隐藏器_动态IP代理的用途

    在如今互联网迅速发展的时代,我们的生活几乎离不开网络,而且网络也逐渐成为了大家赖以生存的工作.如何更好地运用网络已然成为了很多人的工作重心.对于互联网行业工作者来说,对于动态IP代理已经很普遍,但是我 ...

  4. 太阳软件站长丨Python比动态ip代理更适合人工智能

    编程是一项社交活动--Python编程语言社区论坛已经认识到了这一点! 人工智能(AI)是一个全面的技术术语,常常意味着当前计算机科学研究中最先进的领域. 有一段时间,咱们理所当然的认为基本图遍历是A ...

  5. 网络爬虫爬取全国省市区(动态ip代理的获取,实现对ip限制的突破)

    记得还是在学校的时候听说过网络爬虫的,最近闲的蛋疼,想到爬虫这个稀奇的玩意儿感觉挺好玩的,所以就动手做了个 在起初的爬取中用的httpClient进行爬取的,发现越用越麻烦,代码过于繁琐而且解析htm ...

  6. ip代理软件的原理到底是什么?适用场景有哪些?

    顺应互联网时代发展的需求,现在市面上的代理ip比比皆是,那么ip代理软件的原理到底是什么,怎么样才能将它的作用最大化? ip代理软件原理: 原理就是有一台电脑(服务器)代替你访问你要访问的网站/资源然 ...

  7. 动态IP代理的应用场景有哪些?

    动态IP是什么?是当用户上网的时候,可以通过服务商自动分配的地址进行访问.每当发送请求的时,该请求会在访问Web时通过真实的用户,而不是通过数据中心进行的.且每次在提供代理服务的过程中IP地址是不断变 ...

  8. 选择ip代理软件要看那几点?

    信息化时代,互联网是获取信息的主要方式之一,所以很多商家通过互联网展示自己的品牌和产品,但大多数平台都有限制,不允许大量的广告信息发布,需要切换多个账号发布,或者更换ip工具,如此,找什么样的ip代理 ...

  9. 红苹果IP代理软件 v6.2

    一款功能全面的IP代理软件,本软件无任何功能限制,完全免费使用. 软件功能: 1.24小时不间断获取最新全世界可用代理,上万ip数据自动同步,代理数据每日更新. 2.软件启动时自动下载并更新为最新的代 ...

最新文章

  1. huffman树和huffman编码
  2. 新手怎么学以太坊区块链开发?
  3. 异常处理器详解 Java多线程异常处理机制 多线程中篇(四)
  4. MyBatis-Plus selectMapsPage报错
  5. 超级简单的配置虚拟机网络yum源
  6. java 查询启动时间_java获取系统开机时间
  7. redux 存值 及 取值 的操作
  8. 图神经网络(一)图信号处理与图卷积神经网络(2)图信号与图的拉普拉斯矩阵
  9. Natasha 4.0 探索之路系列(二) 「域」与插件
  10. netbeans6.8_NetBeans IDE 8.0和Java 8的新功能
  11. Taro+react开发(76):taro安装
  12. BGP——OSPF与BGP协议联动(出现问题+解决方案配置)
  13. 百度成为“数字中国”建设核心推动力
  14. 接入微信分享过程的喜和泪
  15. 钢铁雄心II(HOI2)作弊码合辑
  16. PADS2007快捷键、无模命令大全
  17. OPTEE:CA-TA会话的创建(二)
  18. LSF集群作业管理系统
  19. php 计算工资,php计算税后工资的方法
  20. Flutter 启动页 消除白屏

热门文章

  1. CeneOS中使用Docker安装Gitlab
  2. Redis事务中几种常见的场景-exec执行前后的语法错误时的处理
  3. C#中全局作用域的常量、字段、属性、方法的定义与使用
  4. 第一次在Linux服务器上部署项目,看完这篇轻松应对
  5. SSM项目中怎样引入并使用Bootstrap
  6. 需求用例分析之一:异常流
  7. 7 Redis 事务
  8. python找最长的字符串_在字符串python中查找最长的唯一子字符串
  9. Cetos 7 系统安装备注事项
  10. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程