Scrapy快速浏览——Scrapy1.8官方文档
Scrapy快速浏览¶
Scrapy是一个用于对web站点进行抓取和提取结构化数据的应用框架,可用于数据挖掘、信息处理等多种用途。
尽管Scrapy最初是为Web页面抓取设计的, 它也可以使用各种API (如 Amazon Associates Web Services) 或作为通用web爬虫来提取数据。
Spider实例讲解¶
为了展示Scrapy的特性,下面将演示一个Scrapy Spider示例,使用最简单的方法来运行蜘蛛。下面是一个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').get(),
'author': quote.xpath('span/small/text()').get(),
}
next_page = response.css('li.next a::attr("href")').get()
if next_page is not None:
yield response.follow(next_page, self.parse)
把这段代码拷贝到一个文件, 把文件命名成和 quotes_spider.py
类似的名字,然后通过runspider
命令运行这个Spider:
scrapy runspider quotes_spider.py -o quotes.json
当运行结束后,在quotes.json
文件中有一个JSON格式的包括引文内容和作者的引文列表,如下所示(下面代码是经过重新格式化处理的,具有较好的可读性):
[{
"author": "Jane Austen",
"text": "The person, be it gentleman or lady, who has not pleasure in a good novel, must be intolerably stupid."
},
{
"author": "Groucho Marx",
"text": "Outside of a dog, a book is man's best friend. Inside of a dog it's too dark to read."
},
{
"author": "Steve Martin",
"text": "A day without sunshine is like, you know, night."
},
...]
刚才发生了什么¶
当你运行命令scrapy runspider quotes_spider.py
, Scrapy在quotes_spider.py
文件中查找Spider定义然后通过抓取引擎来运行它。
整个抓取过程首先通过针对start_urls
属性中定义的URL(在本例中,仅请求“humor”类别的URL)发起请求,然后调用默认的回调方法parse
,将响应对象作为参数传递。在parse
回调函数中,使用CSS选择器遍历quote元素,提取引文内容和作者信息、生成Python字典实例并通过yield
关键字返回,查找到下一页的链接,并使用与回调函数相同的 parse
方法发起另一个请求。
在这展示了Scrapy的一个主要优点:异步调度和处理请求。这意味着Scrapy不需要等待请求完成和处理,它可以发送另一个请求或同时执行其他操作。这也意味着,即使某些请求失败或在处理时发生错误,其他请求也可以继续进行。
虽然这种方式能够进行非常快速的页面爬取(同时以容错的方式发送多个并发请求),但Scrapy也可以通过一些设置来控制爬虫的礼貌性。例如:在每个请求之间设置下载延迟、限制每个域或每个IP的并发请求数量,甚至使用自动限流扩展来根据情况自动进行限制。
注意
这是使用feed导出生成JSON文件,您可以轻松更改导出格式(例如XML或CSV)或存储后端(例如FTP或Amazon S3)。还可以编写项目管道以将项目存储在数据库中。
还有呢?¶
你已经看到了如何使用Scrapy从网站中提取和存储Item信息,但这只是表面现象。Scrapy提供了许多强大的功能,使scraping变得简单高效, 例如:
-
内建支持扩展的CSS和XPath选择器,可以从HTML/XML源中选择和提取数据,包含使用正则表达式提取的辅助方法。
-
一个交互式shell控制台(IPython感知),用于尝试CSS和XPath表达式来收集数据,在编写或调试蜘蛛时非常有用。
-
内建支持以多种格式(JSON、CSV、XML)生成feed导出并将其存储在多个后端(FTP、S3、本地文件系统)
-
强大的编码支持和自动检测,用于处理其他的、非标准和损坏的编码声明。
-
大量的内置扩展和中间件:
- cookies和会话处理
- HTTP特性,如压缩、身份验证、缓存
- user-agent假冒
- robots.txt
- 爬取深度限制
- 等等
-
一个Telnet控制台,用于连接到运行在Scrapy进程控制台,以便对爬虫程序进行检查和调试
-
还有其他一些优点,如可重用的蜘蛛,从站点地图和XML/CSV源抓取站点,一个自动下载图像(或任何其他媒体)的媒体管道,一个缓存DNS解析器等!
接下来是什么?¶
接下来的步骤是安装Scrapy,按照教程学习如何创建一个完整的Scrapy项目并加入社区。谢谢你的关注!
由于官方文档尚未完成翻译,所以文档中的链接现在还不能正确跳转,请耐心等待!