Scrapy最新详细文档1.51以上版本

Scrapy是一种用于抓取网站和提取结构化数据的应用程序框架,可用于广泛的有用应用程序,如数据挖掘,信息处理或历史存档。

尽管Scrapy最初是为网络抓取而设计的,但它也可以用于使用API​​(例如Amazon Associates Web Services)或作为通用网络爬虫来提取数据。

漫画示例蜘蛛

为了向您展示Scrapy带来的内容,我们将以最简单的方式运行蜘蛛,向您介绍Scrapy Spider的示例。

这是一个蜘蛛的代码,它在网页http://quotes.toscrape.com上删除着名的引号 :

import scrapy      class QuotesSpider(scrapy.Spider):      name = "quotes"      start_urls = [          'http://quotes.toscrape.com/tag/humor/',      ]        def parse(self, response):          for quote in response.css('div.quote'):              yield {                  'text': quote.css('span.text::text').extract_first(),                  'author': quote.xpath('span/small/text()').extract_first(),              }            next_page = response.css('li.next a::attr("href")').extract_first()          if next_page is not None:              yield response.follow(next_page, self.parse)  

将它放在一个文本文件中,将其命名为类似quotes_spider.py 的runspider命令并使用以下命令运行蜘蛛:

scrapy runspider quotes_spider.py -o quotes.json  

完成后,您将在quotes.json文件中包含JSON格式的引号列表,其中包含文本和作者,如下所示(为了更好的可读性,此处重新格式化):

[{      "author": "Jane Austen",      "text": "u201cThe person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid.u201d"  },  {      "author": "Groucho Marx",      "text": "u201cOutside of a dog, a book is man's best friend. Inside of a dog it's too dark to read.u201d"  },  {      "author": "Steve Martin",      "text": "u201cA day without sunshine is like, you know, night.u201d"  },  ...]  

刚刚发生了什么?

当您运行该命令时,Scrapy在其中查找Spider定义并通过其爬虫引擎运行它。scrapy runspider quotes_spider.py

通过向start_urls 属性中定义的URL发出请求(在这种情况下,只是幽默类别中的引号的URL )开始爬行,并调用默认回调方法parse,将响应对象作为参数传递。在parse回调中,我们使用CSS Selector循环遍历quote元素,使用提取的引用文本和作者生成Python dict,查找下一页的链接并使用与parse回调相同的方法安排另一个请求 。

在这里,您会注意到Scrapy的一个主要优点:请求是 异步调度和处理的。这意味着Scrapy不需要等待请求完成和处理,它可以在此期间发送另一个请求或执行其他操作。这也意味着即使某些请求失败或在处理错误时发生错误,其他请求也可以继续运行。

虽然这使您能够进行非常快速的爬网(以容错方式同时发送多个并发请求),但Scrapy还可以通过一些设置控制爬网的礼貌。您可以执行以下操作:在每个请求之间设置下载延迟,限制每个域或每个IP的并发请求数量,甚至使用自动限制扩展来尝试自动计算这些请求。

注意

这是使用feed导出生成JSON文件,您可以轻松更改导出格式(例如XML或CSV)或存储后端(例如FTP或Amazon S3)。您还可以编写 项目管道以将项目存储在数据库中。

还有什么?

您已经了解了如何使用Scrapy从网站中提取和存储项目,但这只是表面。Scrapy提供了许多强大的功能,可以轻松高效地进行抓取,例如:

  • 内置支持使用扩展的CSS选择器和XPath表达式从HTML / XML源中选择和提取数据,并使用正则表达式提取辅助方法。
  • 一个交互式shell控制台(支持IPython),用于尝试使用CSS和XPath表达式来抓取数据,在编写或调试蜘蛛时非常有用。
  • 内置支持以多种格式(JSON,CSV,XML)生成Feed导出并将其存储在多个后端(FTP,S3,本地文件系统)中
  • 强大的编码支持和自动检测,用于处理外部,非标准和损坏的编码声明。
  • 强大的可扩展性支持,允许您使用信号和定义良好的API(中间件,扩展和 管道)插入您自己的功能。
  • 广泛的内置扩展和中间件用于处理:
    • cookie和会话处理
    • HTTP功能,如压缩,身份验证,缓存
    • 用户代理
    • robots.txt
    • 爬行深度限制
    • 和更多
  • 一个Telnet控制台,用于连接到Scrapy进程内部运行的Python控制台,以内省和调试您的爬虫
  • 还有其他好东西,比如可重复使用的蜘蛛,可以从Sitemaps和XML / CSV Feed中抓取网站,自动下载与抓取项目相关联的图像(或任何其他媒体)的媒体管道,缓存DNS解析器等等!
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。