DjangoItem 是一个 item 的类,其从 Django 模型中获取字段(field)定义。 您可以简单地创建一个 DjangoItem 并指定其关联的 Django 模型。除了获得您 item 中定义的字段外, DjangoItem 提供了创建并获得一个具有 item 数据的 Django 模型实例(Django model instance)的方法。使用 DjangoItemDjangoItem 使用方法与 Django 中的 ModelForms 类似。
有些情况下,例如爬取大的站点,我们希望能暂停爬取,之后再恢复运行。Scrapy 通过如下工具支持这个功能:一个把调度请求保存在磁盘的调度器一个把访问请求保存在磁盘的副本过滤器[duplicates filter]一个能持续保持爬虫状态(键/值对)的扩展Job 路径要启用持久化支持,你只需要通过 JOBDIR 设置 job directory 选项。
Scrapy 提供了一个简单的性能测试工具。其创建了一个本地 HTTP 服务器,并以最大可能的速度进行爬取。该测试性能工具目的是测试 Scrapy 在您的硬件上的效率,来获得一个基本的底线用于对比。其使用了一个简单的 spider,仅跟进链接,不做任何处理。运行:scrapy bench您能看到类似的输出:2013-05-16 13:08:46-0300 [scrapy] INFO: Scrapy 0.17.
该扩展能根据 Scrapy 服务器及您爬取的网站的负载自动限制爬取速度。设计目标更友好的对待网站,而不使用默认的下载延迟 0。自动调整 scrapy 来优化下载速度,使得用户不用调节下载延迟及并发请求数来找到优化的值。 用户只需指定允许的最大并发请求数,剩下的都交给扩展来完成。
Scrapyd 被移动成为一个单独的项目。 其文档当前被托管在:http://scrapyd.readthedocs.org/
新版功能。Scrapinghub 发布的 apt-get 可获取版本通常比 Ubuntu 里更新,并且在比 Github 仓库 (master & stable branches)稳定的同时还包括了最新的漏洞修复。用法:把 Scrapy 签名的 GPG 密钥添加到 APT 的钥匙环中: sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 627220E7执行如下命令,创建/etc/apt/sources.list.d/scrapy.
Scrapy 提供了一个 Item Pipeline,来下载属于某个特定项目的图片,比如,当你抓取产品时,也想把它们的图片下载到本地。
在 Scrapy 中,类似 RequestsResponse 及 Items 的对象具有有限的生命周期: 他们被创建,使用,最后被销毁。这些对象中,Request 的生命周期应该是最长的,其会在调度队列(Scheduler queue)中一直等待,直到被处理。更多内容请参考架构概览。由于这些 Scrapy 对象拥有很长的生命,因此将这些对象存储在内存而没有正确释放的危险总是存在。 而这导致了所谓的”内存泄露”。
注解本教程所使用的样例站 Google Directory 已经被 Google 关闭了。不过教程中的概念任然适用。 如果您打算使用一个新的网站来更新本教程,您的贡献是再欢迎不过了。 详细信息请参考 Contributing to Scrapy。介绍本文档介绍了如何适用 Firebug(一个 Firefox 的插件)来使得爬取更为简单,有趣。更多有意思的 Firefox 插件请参考对爬取有帮助的实用 Firefox 插件。
这里介绍一些使用 Firefox 进行爬取的点子及建议,以及一些帮助爬取的 Firefox 实用插件。在浏览器中检查 DOM 的注意事项Firefox 插件操作的是活动的浏览器 DOM(live browser DOM),这意味着当您检查网页源码的时候, 其已经不是原始的 HTML,而是经过浏览器清理并执行一些 Javascript 代码后的结果。 Firefox 是个典型的例子,其会在 table 中添加 <tbody> 元素。
Scrapy 默认对特定爬取进行优化。这些站点一般被一个单独的 Scrapy spider 进行处理, 不过这并不是必须或要求的(例如,也有通用的爬虫能处理任何给定的站点)。除了这种爬取完某个站点或没有更多请求就停止的”专注的爬虫”,还有一种通用的爬取类型,其能爬取大量(甚至是无限)的网站, 仅仅受限于时间或其他的限制。
本章节记录了使用 Scrapy 的一些实践经验(common practices)。 这包含了很多使用不会包含在其他特定章节的的内容。在脚本中运行 Scrapy除了常用的 scrapy crawl 来启动 Scrapy,您也可以使用 API 在脚本中启动 Scrapy。需要注意的是,Scrapy 是在 Twisted 异步网络库上构建的,因此其必须在 Twisted reactor 里运行。
新版功能。注解这是一个新引入(Scrapy 0.15)的特性,在后续的功能/API 更新中可能有所改变,查看 release notes 来了解更新。测试 spider 是一件挺烦人的事情,尤其是只能编写单元测试(unit test)没有其他办法时,就更恼人了。 Scrapy 通过合同(contract)的方式来提供了测试 spider 的集成方法。
本篇介绍了调试 spider 的常用技术。 考虑下面的 spider:import scrapyfrom myproject.items import MyItemclass MySpider(scrapy.Spider): name = 'myspider' start_urls = ( 'http://example.com/page1', 'http://example.
Scrapy 相 BeautifulSoup 或 lxml 比较,如何呢?BeautifulSoup 及 lxml 是 HTML 和 XML 的分析库。Scrapy 则是 编写爬虫,爬取网页并获取数据的应用框架(application framework)。Scrapy 提供了内置的机制来提取数据(叫做 选择器(selectors))。 但如果您觉得使用更为方便,也可以使用 BeautifulSoup(或 lxml)。
webserver 被移动到另外一个项目中。托管在:https://github.com/scrapy/scrapy-jsonrpc
Scrapy 提供了内置的 telnet 终端,以供检查,控制 Scrapy 运行的进程。 telnet 仅仅是一个运行在 Scrapy 进程中的普通 python 终端。因此您可以在其中做任何事。telnet 终端是一个自带的 Scrapy 扩展。 该扩展默认为启用,不过您也可以关闭。 关于扩展的更多内容请参考Telnet console 扩展。
虽然 Python 通过 smtplib 库使得发送 email 变得很简单,Scrapy 仍然提供了自己的实现。 该功能十分易用,同时由于采用了 Twisted 非阻塞式(non-blocking)IO,其避免了对爬虫的非阻塞式 IO 的影响。 另外,其也提供了简单的 API 来发送附件。 通过一些 settings 设置,您可以很简单的进行配置。简单例子有两种方法可以创建邮件发送器(mail sender)。
Scrapy 提供了方便的收集数据的机制。数据以 key/value 方式存储,值大多是计数值。 该机制叫做数据收集器(Stats Collector),可以通过 Crawler API 的属性 stats 来使用。在下面的章节常见数据收集器使用方法将给出例子来说明。无论数据收集(stats collection)开启或者关闭,数据收集器永远都是可用的。
crapy 提供了 log 功能。您可以通过 scrapy.log 模块使用。当前底层实现使用了 Twisted logging,不过可能在之后会有所变化。log 服务必须通过显示调用 scrapy.log.start()来开启,以捕捉顶层的 Scrapy 日志消息。 在此之上,每个 crawler 都拥有独立的 log 观察者(observer)(创建时自动连接(attach)),接收其 spider 的日志消息。
关注时代Java