第一章:scrapy介绍

欢迎来到scrapy之旅。通过这本书,我们将帮助你从只会一点或者零基础的Scrapy初学者达到熟练使用这个强大的框架在互联网或者其他资源抓取海量的数据。在这一章节,我们将给你介绍Scrapy并且告诉你能用Scrapy做哪些不可思议的事情。

你好 Scrapy:

Scrapy是一个健壮的抓取网络数据的框架。 作为一个临时的互联网使用者,你会经常发现更愿意将网站上浏览的数据保存在像EXCEL的文件中(参考章节3,基础爬虫),便于在离线或者需要计算的时候使用。作为一个开发者,你更希望将不同网站获取的数据整合起来,但是你也清楚检索和提取这些数据的复杂性。Scrapy可以帮助你完成简单和复杂数据的提取

Scrapy是基于多年健壮高效的提取海量数据的经验上开发的。通过Scrapy, 你只需要通过简单的配置就可以达到其他爬虫框架使用多个类,插件和配置才能达到的的效果。快速浏览章节7:配置和管理,你就能知道通过几行简单的配置就能在Scrapy中完成大量的工作。

从一个开发者的角度,你将会了解Scrapy基于事件的架构(我们将在章节8:Scrapy编程和章节9:管道方法中深入介绍)。它能够让我们对清洗,形成,丰富数据,存储进数据库等等操作进行串联操作。同时还可以享受非常低的性能损耗,当然必须确保是正确的方式。在这本书中,你将会完全学到如何去做到这些。从技术角度来说,由于是基于事件的,在同时有几千个连接的时候,Scrapy能够让我们摆脱由于吞吐量带来的延迟。举一个极端的例子,想象下你准备从网站上提取列表,同时这个网站有大量的页面并且每个页面都有100个列表项。Scrapy将很轻松的并行处理16个对于网站的请求,并且假设一个请求平均需要1秒完成,那么你将在1秒内爬取16个页面。乘上每个页面的列表数目,你将在1秒内生成1600个列表。假设你必须将这些列表存储在一个高并发的云存储上,存储每个列表平均需要耗时3秒,那么就意味着我们需要同时并行运行1600*3=4800个写请求(你将会从章节9:管道方法中看到很多类似的有趣的计算)。对于一个传统的多线程应用,这将需要4800个线程,这对你和你的操作系统而言都是很糟糕的体验。在Scrapy中,4800个并发的请求很平常,只要你的操作系统支持就可以了。更进一步来说,SCrapy对于内存的需求和你抓取列表的数据量非常接近,这和多线程正好相反,多线程中的每个线程相比列表的大小都增加了很多额外的开销。

简单来说,速度慢或者不可预测的网站,数据库或远程API将不会对你建立的scraper性能造成影响,因为可以同时并行的运行许多请求并且在一个线程中进行管理。和多线程应用相比,可以使用更简单的代码同时运行多个抓取器和其他应用,这将会降低费用。

更多喜欢Scrapy的理由:

Scrapy已经存在5年多的时间了,现在已经成熟稳定了。除了我们之前章节提到过的性能优势外,还有其他原因让你喜欢Scrapy:

Scrapy可以读懂破损的HTML:

你可以从Scrapy中直接使用BeautifulSoup或者LXML. 但是Scrapy提供selectors--一个相对lxml更高级的XPATH解析器。它可以有效的处理破损的HTML代码和令人费解的编码

社区:

Scrapy有一个充满活力的社区。看看在

https://groups.google.com/forum/#!forum/scrapy-users上面的邮件列表和在Stack Overflow上的数以千计的问题。大多数的答案在几分钟内得到答复。更多的社区资源请参考http://scrapy.org/community/

由社区维护的组织有序的代码:

Scrapy要求用标准的方式来组织你的代码。你编写爬虫和管道的python模块,你就可以自动使引擎的效率提高。如果你在网上搜索,就会发现有大量的人有使用Scrapy的经验。这就意味着你可以方便的找到人来维护和扩展你的代码。无论谁加入你的团队都不必经历曲线的学习来理解你的独特爬虫。

有质量的更新:

如果你看下发布文档(http://doc.scrapy.org/en/latest/news.html), 你将会注意到有不断增长的关于特性,bug的修复。

后面关于本书的目的这里就没再翻译了。

Learning Scrapy 中文版翻译 第一章的更多相关文章

  1. Learning Scrapy 中文版翻译 第二章

    为了从网页中提取信息,你有必要对网页的结构做一些了解.我们将快速学习HMTL,HTML数状结构以及用XPath在网页上提取信息 HTML, DOM树结构以及XPath 让我们花一点时间来了解当用户在浏 ...

  2. 强化学习 reinforcement learning: An Introduction 第一章, tic-and-toc 代码示例 (结构重建版,注释版)

    强化学习入门最经典的数据估计就是那个大名鼎鼎的  reinforcement learning: An Introduction 了,  最近在看这本书,第一章中给出了一个例子用来说明什么是强化学习, ...

  3. Gradle2.0用户指南翻译——第一章. 介绍

    翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...

  4. ActiveMQ 翻译第一章 1.2小节(松耦合与ActiveMQ和何时使用ActiveMQ)

    第一章 1.2.1小节  松耦合与ActiveMQ ActiveMQ为应用程序架构提供送耦合实现组件.松耦合经常被引入到系统架构中,来减轻紧耦合的远程工程调用的使用.松耦合的设计是异步的,来自其他系统 ...

  5. 关于learning Spark中文版翻译

      在网上找了很久中文版,感觉都是需要支付一定金币才能下载,索性自己翻译算了.因为对Spark有一定了解,而且书籍前面写道,对Spark了解可以直接从第三章阅读,就直接从第三章开始翻译了,应该没有什么 ...

  6. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之一

    一.简介 在计算机的世界里,当我们谈论并发时,我们指的是一系列的任务同时运行于一个计算机中.这里说的同时运行,在计算机拥有多于一个处理器或者是一个多核处理器的时候才是真正的同时,在计算机只拥有单核处理 ...

  7. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之六

    十一.处理线程组中的未控制异常 每种编程语言一个很重要的特性就是其所提供的用来处理程序中错误情况的机制.Java语言和其他的现代语言一样,是提供了异常机制来处理对象程序中的错误.Java提供了很多的类 ...

  8. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之五

    九.使用线程本地变量 一个并发程序的最关键特征就是共享数据.这个特性在那些继承了 Thread 类或者 实现了 Runnable 接口的对象上显得更加重要. 如果你创建一个实现了 Runnable 接 ...

  9. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之四

    七.创建和运行一个后台线程 Java中有一种特别的线程叫做 deamon(后台) 线程.这类线程具有非常低的权限,并且只有在同一个程序中没有其他的正常线程在运行时才会运行.注意:当一个程序中只剩下后台 ...

随机推荐

  1. 201521123087 《Java程序设计》第1周学习总结

    1.学习总结 初步了解面对对象编程思想 学会安装JDK和设置JAVA_HOME,PATH,CLASSPATH环境变量 简单了解java 2.书面作业 1.为什么java程序可以跨平台运行?执行java ...

  2. Markdown 模板

    一个例子: 例子开始 1. 本章学习总结 今天主要学习了三个知识点 封装 继承 多态 2. 书面作业 Q1. java HelloWorld命令中,HelloWorld这个参数是什么含义? 今天学了一 ...

  3. linux 编辑文件时 E45: 'readonly' option is set (add ! to override) 隐藏属性 chattr lsattr

    在改一个系统当中的文件参数时, vim config.php 时,提示 E45: 'readonly' option is set (add ! to override) ,同时不能编辑不能删除不能设 ...

  4. Oracle数据泵的导入导出

    说明:数据泵技术是Oracle Database 10g 中的新技术,它比原来导入/导出(imp,exp)技术快15-45倍.速度的提高源于使用了并行技术来读写导出转储文件. expdp导出 1.以s ...

  5. Jquery第一篇【介绍Jquery、回顾JavaScript代码、JS对象与JQ对象的区别】

    什么是Jquery? Jquey就是一款跨主流浏览器的JavaScript库,简化JavaScript对HTML操作 就是封装了JavaScript,能够简化我们写代码的一个JavaScript库 为 ...

  6. 02-windows 安装以太坊 ethereum 客户端 (win7-64)-大叔思维

    以太坊(Ethereum)是一个运行智能合约的去中心化平台(Platform for Smart Contract),平台上的应用按程序设定运行,不存在停机.审查.欺诈.第三方人为干预的可能.以太坊平 ...

  7. RMQ问题第一弹

    今天,我给大家分享一下我在学习 RMQ 问题过程中对该问题的理解. RMQ (Range Minimum/Maximum Query ):中文名为"区间最值查询".RMQ 问题指的 ...

  8. 查找Oracle数据库中的重复记录

    本文介绍了几种快速查找ORACLE数据库中的重复记录的方法. 下面以表table_name为例,介绍三种不同的方法来确定库表中重复的记录 方法1:利用分组函数查找表中的重复行:按照某个字段分组,找出行 ...

  9. ASP.NET Core中如何调整HTTP请求大小的几种方式

    一.前言 一般的情况下,我们都无需调用HTTP请求的大小,只有在上传一些大文件,或者使用HTTP协议写入较大的值时(如调用WebService)才可能会调用HTTP最大请求值. 在ASP.NET Co ...

  10. AES加密解密——AES在JavaWeb项目中前台JS加密,后台Java解密的使用

    一:前言 在软件开发中,经常要对数据进行传输,数据在传输的过程中可能被拦截,被监听,所以在传输数据的时候使用数据的原始内容进行传输的话,安全隐患是非常大的.因此就要对需要传输的数据进行在客户端进行加密 ...