鍍金池/ 教程/ Java/ Scrapy快速入門
Scrapy項目加載器(Item Loader)
Scrapy快速入門
Scrapy蜘蛛(Spider)
Scrapy教程
Scrapy定義項目
Scrapy執(zhí)行爬行捉取
Scrapy項目(Items)
Scrapy安裝
Scrapy提取項目
Scrapy第一個Spider
Scrapy選擇器(Selector)
Scrapy Shell
Scrapy創(chuàng)建項目
Scrapy命令行工具
Scrapy日志
Scrapy使用項目

Scrapy快速入門

Scrapy快速入門

最好的學(xué)習(xí)方法是參考例子,Scrapy 也不例外。出于這個原因,有一個 Scrapy 項目名為 quotesbot 例子,可以參考它了解和使用 Scrapy。它包含兩個蜘蛛用于抓取 http://quotes.toscrape.com, 一個使用CSS選擇器,而另一個使用XPath表達式。

提示:安裝 Scrapy 開發(fā)環(huán)境配置請參考 - http://www.yiibai.com/scrapy/scrapy_environment.html

項目 quotesbot 的源代碼可在: https://github.com/scrapy/quotesbot. 在這里可以找到關(guān)于項目 README 更多信息。

如果你熟悉使用 Git,可以檢出的代碼。否則點擊這里下載該項目源代碼的 zip 文件。
現(xiàn)在我們一步步的了解和學(xué)習(xí)這個項目。

quotesbot 項目簡介

這是一個 Scrapy 示例(入門)的項目,它實現(xiàn)從 http://quotes.toscrape.com 上爬行抓取名人名言。

這個項目只是針對學(xué)習(xí)演示目的。

提取數(shù)據(jù)

這個項目將提取名言,以及各自的作者姓名和標簽相結(jié)合。提取的數(shù)據(jù)看起來是這樣的,如下例子:

{
    'author': 'Douglas Adams',
    'text': '“I may not have gone where I intended to go, but I think I ...”',
    'tags': ['life', 'navigation']
}

蜘蛛 - Spiders

該項目包含兩個蜘蛛(Spider),可以使用 list 命令列出它們:

$ scrapy list
toscrape-css
toscrape-xpath

這兩種蜘蛛提取同一網(wǎng)站相同的數(shù)據(jù),但是如果要刮取 CSS,則使用 CSS 選擇器,而要刮取 XPath 則采用 XPath 表達式。

您可以通過Scrapy教程去了解更多的蜘蛛。

運行蜘蛛

您可以使用 scrapy 爬行的命令,如運行一個蜘蛛:

$ scrapy crawl toscrape-css

如果想保存數(shù)據(jù)刮到一個文件,可以通過 -o 選項:

$ scrapy crawl toscrape-css -o quotes.json

代碼實現(xiàn)

我們先來看看 quotesbot/spiders/toscrape-xpath.py 的代碼實現(xiàn) -

# -*- coding: utf-8 -*-
import scrapy


class ToScrapeSpiderXPath(scrapy.Spider):
    name = 'toscrape-xpath'
    start_urls = [
        'http://quotes.toscrape.com/',
    ]

    def parse(self, response):
        for quote in response.xpath('//div[@class="quote"]'):
            yield {
                'text': quote.xpath('./span[@class="text"]/text()').extract_first(),
                'author': quote.xpath('.//small[@class="author"]/text()').extract_first(),
                'tags': quote.xpath('.//div[@class="tags"]/a[@class="tag"]/text()').extract()
            }

        next_page_url = response.xpath('//li[@class="next"]/a/@href').extract_first()
        if next_page_url is not None:
            yield scrapy.Request(response.urljoin(next_page_url))

另外一個 Spider 采用 XPath 表達式 quotesbot/spiders/toscrape-xpath.py 的代碼實現(xiàn) -

# -*- coding: utf-8 -*-
import scrapy


class ToScrapeSpiderXPath(scrapy.Spider):
    name = 'toscrape-xpath'
    start_urls = [
        'http://quotes.toscrape.com/',
    ]

    def parse(self, response):
        for quote in response.xpath('//div[@class="quote"]'):
            yield {
                'text': quote.xpath('./span[@class="text"]/text()').extract_first(),
                'author': quote.xpath('.//small[@class="author"]/text()').extract_first(),
                'tags': quote.xpath('.//div[@class="tags"]/a[@class="tag"]/text()').extract()
            }

        next_page_url = response.xpath('//li[@class="next"]/a/@href').extract_first()
        if next_page_url is not None:
            yield scrapy.Request(response.urljoin(next_page_url))

參考


上一篇:Scrapy Shell下一篇:Scrapy日志