第一章: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. 团队作业4——第一次项目冲刺(Alpha版本)7th day

    一.Daily Scrum Meeting照片 二.燃尽图 三.项目进展 在计时模式下能够记录用户的用户名和成绩,没有弄登录功能, 将程序定义为单机的 未完成的卡片为登录功能和使用QQ登录. 四.困难 ...

  2. 201521123045 《Java程序设计》第2周学习总结

    ---恢复内容开始--- #1. 本周学习总结 上课讲解了上次的实验题目,对其中题目的一些问题得到了解决.学会了java数组的使用,对如何使用码云上传代码有了更清晰的理解.pta还是有一些问题没有解决 ...

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

    1. 本章学习总结 (1)对JAVA的历史有了初步了解 (2)学会安装JDK和设置JAVA_HOME,PATH,CLASSPATH环境变量 (3)范围:JDK>JRE>JVM 2. 书面作 ...

  4. eclipse : java项目中的web.xml( Deployment Descriptor 部署描述文件 )配置说明

    context-param.listener.filter.servlet  首先可以肯定的是,加载顺序与它们在 web.xml 配置文件中的先后顺序无关.即不会因为 filter 写在 listen ...

  5. [01] Pattern类和Matcher类

    在Java中,有个java.util.regex包,这是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包. 它主要有两个类: Pattern   一个正则表达式经编译后的表现模式,可以理解为 ...

  6. Hibernate @Embeddable注释

    在hibernate中实现自定义类型,只要实现UserType接口即可或者以Component的形式提供.JPA的@Embedded注释可以在你的Entity中使用一般的Java对象,此对象需要用@E ...

  7. 基于FPGA的腐蚀膨胀算法实现

    本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做" ...

  8. android自定义动画

    前一篇说了实现过程,这次来写一个自己简单实现的3d动画 先来属性声明配置,方便使用xml 文件来定制动画 <!-- 有些类型其实是没必要的,只是实例代码,为了更具有代表性 --> < ...

  9. angular学习笔记03 理论加实践

    novalidate 属性是在 HTML5 中新增的.禁用了使用浏览器的默认验证. //augular.js自定义指令 .directive('runoobDirective',function(){ ...

  10. java学习——java中的反射学习笔记

    Java--reflect 一.Class类的使用 什么是Class类? 1:在面向对象的世界中,万事万物皆对象. java语言中,静态的成员,普通数据类型类是不是对象呢? 是,对象!是类的对象! 类 ...