《Learning Scrapy》1 Scrapy介绍

第1章Scrapy介绍


欢迎来到Scrapy之旅。通过这本书,我们希望可以让你从一个只会一点或零基础的Scrapy初学者,达到熟练使用这个强大的框架海量抓取网络和其他资源的水平。在本章里,我们会向你介绍Scrapy,以及Scrapy能做什。

HelloScrapy

Scrapy是一个健壮的抓取网络资源的框架。作为互联网使用者,你可能经常希望可以将网上的资源保存到Excel中(见第3章),以便下线时使用或进行计算。作为开发者,你可能经常希望将不同网站的资源整合起来,但你清楚这么做的复杂性。Scrapy可以帮助你完成简单和复杂的数据提取。

Scrapy是在数年的、以健壮高效的方式提取网络资源的经验上开发的。使用Scrapy,你只需进行一项设置,就可以抵过其它框架使用多个类、插件和配置。看一眼第7章,你就可以知道仅需几行代码就可以完成大量工作。

从卡发着的角度,你会喜欢Scrapy的基于时间的架构(见第8章和第9章)。它可以让我们进行串联操作,清洗、形成、丰富数据,或存入数据库等等,同时不会有太大的性能损耗。从技术上说,基于事件的机制,Scrapy可以让吞吐量摆脱延迟,同时开放数千个连接。举一个极端的例子,假设你要从一个网站提取列表,每页有100个列表。Scrapy可以轻松的同时处理16个请求,假设每个请求在一秒内完成,每秒就可以抓取16个页面。乘以每页的列表数,每秒就可以抓取1600个列表。然后,你想将每个列表项写入一个高并发的云存储,每个要花3秒。为了支持每秒16个请求,必须要并行进行4800个写入请求(第9章你会看到更多类似的计算)。对于传统的多线程应用,这需要4800个线程,对你和操作系统都是个挑战。在Scrapy中,4800个并发请求很平常,只要操作系统支持就行。更进一步,Scrapy的内存要求和你要抓取的列表项的数据量相关,而对于多线程应用,每个线程的大小都和一个列表的大小相当。

简而言之,速度慢或不可预测的网站、数据库或远程API不会对Scrapy的性能造成影响,因为你可以进行并发请求,用单线程管理。这样相比于多线程应用,使用更简单的代码反而可以降低费用,同时运行几个抓取器。

喜爱Scrapy的其它理由

Scrapy出现已经有五年多了,现在已经成熟稳定。除了前面提到的性能的优点,以下是其它喜爱Scrapy的理由:

lScrapy可以读懂破损的HTML

你可以在Scrapy上直接使用BeautifulSoup或lxml,但Scrapy提供Selector,一个相比lxml更高级的XPath界面。它可以有效的处理破损的HTML代码和费解的编码。

l社区

Scrapy有一个活跃的社区。可以查看Scrapy的邮件列表https://groups.google.com/forum/#!forum/scrapy-users和Stack Overflow上的数千个问题http://stackoverflow.com/questions/tagged/scrapy。多数问题在数分钟之内就会得到解答。http://scrapy.org/community/有更多的社区资源。

l社区维护的组织清晰的代码

Scrapy需要用标准的方式组织代码。你用Python来写爬虫和pipelines,就可以自动使引擎的效率提高。如果你在网上搜索,你会发现许多人有使用Scrapy的经验。这意味着,可以方便地找人帮你维护或扩展代码。无论是谁加入你的团队,都不必经过学习曲线理解你特别的爬虫。

l注重质量的更新

如果查看版本记录(http://doc.scrapy.org/en/latest/news.html),你会看到有不断的更新和稳定性/错误修正。

关于此书:目标和用法

对于此书,我们会用例子和真实的数据教你使用Scrapy。大多数章节,要抓取的都是一个房屋租赁网站。我们选择它的原因是,它很有代表性,并可以进行一定的变化,同时也很简单。使用这个例子,可以让我们专注于Scrapy。

我们会从抓取几百页开始,然后扩展到抓取50000页。在这个过程中,我们会教你如何用Scrapy连接MySQL、Redis和Elasticsearch,使用Google geocoding API找到给定地点的坐标,向Apach Spark传入数据,预测影响价格的关键词。

你可能需要多读几遍本书。你可以粗略地浏览一遍,了解一下结构,然后仔细读一两章、进行学习和试验,然后再继续读。如果你对哪章熟悉的话,可以跳过。如果你熟悉HTML和XPath的话,就没必要在第2章浪费太多时间。某些章如第8章,既是示例也是参考,具有一定深度。它就需要你多读几遍,每章之间进行数周的练习。如果没有完全搞懂第8章的话,也可以读第9章的具体应用。后者可以帮你进一步理解概念。

我们已经尝试调整本书的结构,以让其既有趣也容易上手。但我们做不到用这本书教给你如何使用Python。Python的书有很多,但我建议你在学习的过程总尽量保持放松。Python流行的原因之一是,它很简洁,可以像读英语一样读代码。对于Python初学者和专家,Scrapy都是一个高级框架。你可以称它为“Scrapy语言”。因此,我建议你直接从实例中学习,如果你觉得Python语法有困难的话,再进行补充学习,可以是在线的Python教学或Coursera的初级课程。放心,就算不是Python专家,你也可以成为一个优秀的Scrapy开发者。

掌握自动数据抓取的重要性

对我们许多人,对像Scrapy这样的新技术的好奇心满足感,就是学习的动力。学习这个框架的同时,我们可以从数据开发和社区,而不是代码,获得额外的好处。

开发高可靠高质量的应用 提供真实的开发进度表

为了开发新颖高质量的应用,我们需要真实和大量的数据,如果可能的话,最好在写代码之前就有数据。现在的软件开发都是要实时处理海量不完美的数据,以获取知识和洞察力。当软件应用到海量数据时,错误和疏忽很难检测出来,这就会造成开销巨大的决策。例如,在进行人口统计时,很容易忽略一整个州,仅仅是因为这个州的名字太长,它的数据被丢弃了。通过细心的抓取,有高质量的、海量的真实数据,在开发和设计的过程中,就可以找到并修复bug,然后才能做出正确的决策。

另一个例子,假设你想设计一个类似亚马逊的“如果你喜欢这个,你可能也喜欢那个”的推荐系统。如果在开始之前,你就能抓取手机真实的数据,你就可以快速知道一些问题,比如无效记录、打折商品、重复、无效字符、因为分布导致的性能问题。数据会强制你设计健壮的算法以处理被数千抢购或无人问津的商品。相比较于数周开发之后却碰到现实问题,这两种方法可能最重会汇合,但是在一开始就能对整个进程有所掌握,两者肯定是不同的。从数据开始,可以让软件的开发过程更为愉悦和有预测性。

快速开发最小化可行产品

海量真实数据对初创企业更为重要。你可能听说过“精益初创企业”,Eric

Ries发明的词,用来描述高度不确定的企业发展阶段,尤其是对技术初创企业。它的核心概念之一就是最小化可行产品(MVP),一个只有有限的功能的产品,快速开发并投放,以检测市场反应、验证商业假设。根据市场反应,初创企业可以选择追加投资,或选择其他更有希望的项目。

很容易忽略这个过程中的某些方面,这些方面和数据问题密切相关,用Scrapy可以解决数据问题。当我们让潜在用户尝试移动App时,例如,作为开发者或企业家,我们让用户来判断App完成时功能如何。这可能对非专家的用户有点困难。一个应用只展示“产品1”、“产品2”、“用户433”,和另一个应用展示“Samsung UN55J6200 55-Inch TV”,用户“Richard S.”给它打了五星评价,并且有链接可以直接打开商品主页,这两个应用的差距是非常大的。很难让人们对MVP进行客观的评价,除非它使用的数据是真实可信的。

一些初创企业事后才想到数据,是因为考虑到采集数据很贵。事实上,我们通常都是打开表格、屏幕、手动输入数据,或者我们可以用Scrapy抓取几个网站,然后再开始写代码。第4章中,你可以看到如何快速创建一个移动App以使用数据。

网络抓取让你的应用快速成长Google不能使用表格

让我们来看看表格是如何影响一个产品的。假如谷歌的创始人创建了引擎的第一个版本,但要求每个网站站长填入信息,并复制粘贴他们的每个网页的链接。他们然后接受谷歌的协议,让谷歌处理、存储、呈现内容,并进行收费。可以想象整个过程工作量巨大。即使市场有搜索引擎的需求,这个引擎也成为不了谷歌,因为它的成长太慢了。即使是最复杂的算法也不能抵消缺失数据。谷歌使用网络爬虫逐页住区,填充数据库。站长完全不必做任何事。实际上,想屏蔽谷歌,还需要做一番努力。

让谷歌使用表格的主意有点搞笑,但是一个普通网站要用户填多少表呢?登录表单、列表表单、勾选表单等等。这些表单会如何组织应用的成长?如果你足够了解用户,你会知道他们还会使用其它什么网站,或许已经有了账户。例如,开发者可能有Stack Overflow和GitHub账户。经过用户同意,你能不能直接用这些账户就自动填入照片、介绍和最近的帖子呢?你能否对这些帖子做文本分析,根据结果设置网站的导航结构、推荐商品或服务呢?我希望你能看到将表格换为自动数据抓取可以更好的为用户服务,使网站快速成长。

发现并实践

抓取数据自然而然会让你发现和思考你和被抓取目标的关系。当你抓取一个数据源时,自然会有一些问题:我相信他们的数据吗?我相信提供数据的公司吗?我应该和它们正式商谈合作吗?我和他们有竞争吗?从其他渠道获得数据花费是多少?这些商业风险是必然存在的,但是抓取数据可以让我们更早的知道,进行应对。

你还想知道如何反馈给这些网站或群体?给他们免费流量,他们肯定很高兴。另一方面,如果你的应用不能提供价值,继续合作的可能就会变小,除非找到另外合作的方式。通过从各种渠道获得数据,你可以开发对现有生态更友好的产品,甚至打败就产品。老产品或许能帮助你成长,例如,你的应用数据来自两个或三个不同的生态圈,每个生态圈都有十万名用户,结合起来,你的应用或许就能惠及三十万人。例如,加入你的初创企业结合了摇滚乐和T恤打印社区,就将两个生态圈结合了起来,你和这两个社区都可以得到成长。

在充满爬虫的网络世界做守法公民

开发爬虫还有一些注意事项。不负责任的网络抓取让人不悦,有时甚至是犯罪的。两个最重要的要避免的就是拒绝访问攻击(DoS)和侵犯著作权。

对于第一个,普通访问者每隔几秒才访问一个新页面。爬虫的话,每秒可能下载几十个页面。流量超过普通用户的十倍。这会让网站的拥有者不安。使用阻塞器降低流量,和普通用户相仿。检测响应时间,如果看到响应时间增加,则降低抓取的强度。好消息是Scrapy提供了两个现成的方法(见第7章)。

对于著作权,可以查看网站的著作权信息,以确认什么可以抓取什么不能抓取。大多数站点允许你处理网站的信息,只要不复制并宣称是你的。一个好的方法是在你请求中使用一个User-Agent字段,告诉网站你是谁,你想用他们的数据做什么。Scrapy请求默认使用你的BOT_NAME作为User-Agent。如果这是一个URL或名字,可以直接指向你的应用,那么源网站的站长就可以访问你的站点,并知道你用他的数据做什么。Scrapy提供了功能(RobotsTxtMiddleware),尊重源网站列在robots.txt文件的意见(在http://www.google.com/robots.txt可以查看一个例子)。最后,最好提供可以让站长提出拒绝抓取的方法。至少,可以让他们很容易地找到你,并发表观点。

每个国家的法律不同,我无意给出法律上的建议。请寻求专业的法律建议,如果你觉得需要的话。这适用于整本书的内容。

Scrapy不是什么

最后,因为数据抓取和相关的名词定义很模糊,或相互使用,很容易误解Scrapy。我这里解释一下,避免发生误解。

Scrapy不是Apache Nutch,即它不是一个普通的网络爬虫。如果Scrapy访问一个网站,它对网站一无所知,不能做任何有意义的事。Scrapy是用来抓取结构化的信息,并需要手动设置XPath和CSS表达式。Apache

Nutch会取得一个原生网页并提取信息,例如关键词。它更适合某些应用,而不适合其它应用。

Scrapy不是Apache Solr、Elasticsearch或Lucene;换句话说,它和搜索引擎无关。Scrapy不是用来给包含“爱因斯坦”的文档寻找参考。你可以使用Scrapy抓取的数据,并将它们插入到Solr或Elasticsearch,如第9章所示,但是这只是使用Scrapy的一种途径,而不是嵌入Scrapy的功能。

最后,Scrapy不是像MySQL、MongoDB、Redis的数据库。它不存储和索引数据。它只是提取数据。也就是说,你需要将Scrapy提取的数据插入到数据库中,可行的数据库有多种。虽然Scrapy不是数据库,它的结果可以方便地输出为文件,或不进行输出。

总结

在本章中,我们向你介绍了Scrapy以及它的作用,还有使用这本书的最好方法。通过开发与市场完美结合的高质量应用,我们还介绍了几种自动化数据抓取能使你获益的方法。下一章会介绍两个极为重要的网络语言,HTML和XPath,我们在每个Scrapy项目中都会用到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Paperback: 270 pages Publisher: Packt Publishing - ebooks Account (January 30, 2016) Language: English ISBN-10: 1784399787 ISBN-13: 978-1784399788 Key Features Extract data from any source to perform real time analytics. Full of techniques and examples to help you crawl websites and extract data within hours. A hands-on guide to web scraping and crawling with real-life problems and solutions Book Description This book covers the long awaited Scrapy v 1.0 that empowers you to extract useful data from virtually any source with very little effort. It starts off by explaining the fundamentals of Scrapy framework, followed by a thorough description of how to extract data from any source, clean it up, shape it as per your requirement using Python and 3rd party APIs. Next you will be familiarised with the process of storing the scrapped data in databases as well as search engines and performing real time analytics on them with Spark Streaming. By the end of this book, you will perfect the art of scarping data for your applications with ease What you will learn Understand HTML pages and write XPath to extract the data you need Write Scrapy spiders with simple Python and do web crawls Push your data into any database, search engine or analytics system Configure your spider to download files, images and use proxies Create efficient pipelines that shape data in precisely the form you want Use Twisted Asynchronous API to process hundreds of items concurrently Make your crawler super-fast by learning how to tune Scrapy's performance Perform large scale distributed crawls with scrapyd and scrapinghub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值