Learning Scrapy 中文版翻译 第一章
第一章: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 中文版翻译 第一章的更多相关文章
- Learning Scrapy 中文版翻译 第二章
为了从网页中提取信息,你有必要对网页的结构做一些了解.我们将快速学习HMTL,HTML数状结构以及用XPath在网页上提取信息 HTML, DOM树结构以及XPath 让我们花一点时间来了解当用户在浏 ...
- 强化学习 reinforcement learning: An Introduction 第一章, tic-and-toc 代码示例 (结构重建版,注释版)
强化学习入门最经典的数据估计就是那个大名鼎鼎的 reinforcement learning: An Introduction 了, 最近在看这本书,第一章中给出了一个例子用来说明什么是强化学习, ...
- Gradle2.0用户指南翻译——第一章. 介绍
翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc本文翻译所在分支:https://github.com/msdx/gradledoc/tree/2 ...
- ActiveMQ 翻译第一章 1.2小节(松耦合与ActiveMQ和何时使用ActiveMQ)
第一章 1.2.1小节 松耦合与ActiveMQ ActiveMQ为应用程序架构提供送耦合实现组件.松耦合经常被引入到系统架构中,来减轻紧耦合的远程工程调用的使用.松耦合的设计是异步的,来自其他系统 ...
- 关于learning Spark中文版翻译
在网上找了很久中文版,感觉都是需要支付一定金币才能下载,索性自己翻译算了.因为对Spark有一定了解,而且书籍前面写道,对Spark了解可以直接从第三章阅读,就直接从第三章开始翻译了,应该没有什么 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之一
一.简介 在计算机的世界里,当我们谈论并发时,我们指的是一系列的任务同时运行于一个计算机中.这里说的同时运行,在计算机拥有多于一个处理器或者是一个多核处理器的时候才是真正的同时,在计算机只拥有单核处理 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之六
十一.处理线程组中的未控制异常 每种编程语言一个很重要的特性就是其所提供的用来处理程序中错误情况的机制.Java语言和其他的现代语言一样,是提供了异常机制来处理对象程序中的错误.Java提供了很多的类 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之五
九.使用线程本地变量 一个并发程序的最关键特征就是共享数据.这个特性在那些继承了 Thread 类或者 实现了 Runnable 接口的对象上显得更加重要. 如果你创建一个实现了 Runnable 接 ...
- Java 7 Concurrency Cookbook 翻译 第一章 线程管理之四
七.创建和运行一个后台线程 Java中有一种特别的线程叫做 deamon(后台) 线程.这类线程具有非常低的权限,并且只有在同一个程序中没有其他的正常线程在运行时才会运行.注意:当一个程序中只剩下后台 ...
随机推荐
- 201521123066《Java程序设计》第八周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结** 用cont ...
- 201521123045 《Java程序设计》第6周学习总结
Java 第六周总结 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结.注1:关键词与内容不求多,但概念之间的 ...
- 201521123061 《Java程序设计》第三周学习总结
1. 本章学习总结 2. 书面作业 **Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2 ...
- 201521123035《Java程序设计》第十一周作业
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 本周对多线程的冲突是从多线程的冲突开始讲起,从而提出互斥共享与互斥访问.其中,互斥访问提到了synchronize ...
- POJ 3625 最小生成树 Prim C++
Building Roads Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11861 Accepted: 3376 D ...
- JVM菜鸟进阶高手之路八(一些细节)
转载请注明原创出处,谢谢! gc日志问题 查看docker环境的gc日志,发现是下面这种情况,很奇怪,一直怀疑是docker环境那里是否有点问题,并没有怀疑配置,之前物理机上面的gc日志都是正常那种. ...
- 这是一名Java学者关于学习方向的建议
无可厚非,编程是一门艺术.但是辉煌的背后必须是一段辛苦的奋斗过程,而过程的引导方向就是最重要的一环.Java语言可谓是引领了编程的潮流,你会是怎样去学的呢? 这是一名Java学者的学习方向的建议 注: ...
- oracle pl/sql 控制结构(分支,循环,控制)
一.pl/sql的进阶--控制结构在任何计算机语言(c,java,pascal)都有各种控制语句(条件语句,循环结构,顺序控制结构...),在pl/sql中也存在这样的控制结构.在本部分学习完成后,希 ...
- 我是如何利用Hadoop做大规模日志压缩的
背景 刚毕业那几年有幸进入了当时非常热门的某社交网站,在数据平台部从事大数据开发相关的工作.从日志收集.存储.数据仓库建设.数据统计.数据展示都接触了一遍,比较早的赶上了大数据热这波浪潮.虽然今天的人 ...
- 1.Bootstrap-简介
1.介绍 Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的. 2.HTML 模板 一个使用了 Boots ...