[Scrapy]简介

感慨于我们当前的国内Scrapy相关的中文教程系列很少,当然也有很多很厉害的前辈,例如静觅的博客对Scrapy有很是深入的研究,但是有一点太抽象了一些,不太详细,我这回主要是以 Scrapy 官方的操作指南为蓝本,进行总结和概括,和各位有心的读者一起探讨一下如何用Scrapy进行网站上的数据挖掘,从零开始,希望各位能够喜欢!

什么是Scrapy?

首先,Scrapy是一种应用框架,这个框架可以用来爬取指定网站上的数据,这些数据可以用来进行数据挖掘这之类的高级的东东

程序举例:

接下来我们通过爬取一个名人名言网站的数据进行举例分析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然后进入终端执行命令

scrapy runspider quotes_spider.py -o quotes.json

当这一条命令成功运行时,我们可以发现我们生成了一个叫做 quotes.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 runspider quotes_spider.py这一条命令的时候,Scrapy就会从中寻找 爬虫 的定义, 并且通过它的引擎来运行它
我们爬取数据首先通过定义start_urls来定义我们需要访问的网址(在这里我们指向的是幽默标签里的网址),接下来我们定义一个以 response作为参数的函数parse这我们用CSS作为选择对象,产生了一个python的字典,里面的内容包含着名人名言的内容和作者,同时也寻找下一页的链接,再次爬取数据。

通过以上的分析,我们很容易发现Scrapy的一个显著的优点:请求和数据的处理是异步的,这就意味着Scrapy不需要等待请求的完成来处理数据,在这一段时间我们可以再次发送请求,所以不会因为一条请求失败而导致程序不能够继续运行。
Scrapy的容错率好,执行效率高等优点可以让数据处理的游刃有余。

Leave a Reply

Your email address will not be published. Required fields are marked *