1. 程式人生 > >1.Scrapy at a glance

1.Scrapy at a glance

簡介

Scrapy 一個爬蟲框架。

程式碼示例

scrapy 執行單個爬蟲檔案,爬取 [http://quotes.toscrape.com/tag/humor/] 上的名言和作者

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('.text::text').extract_first(),
                'author': quote.xpath('span/small/text()').extract_first(),
            }
        next_page = response.css('.next a::attr(href)').extract_first()
        if next_page:
            yield response.follow(next_page, self.parse)

在命令列中執行: scrapy runspider quotes_spider.py -o quotes.csv 將結果輸出到 quotes.csv

執行流程:

  • scrapy 根據 start_urls 傳送GET請求。當響應返回時,呼叫預設的回撥函式 parse()。
  • 在 parse() 中,使用 XPath 或 CSS選擇器 提取資料(字典格式),並通過 response.follow() 傳送 "下一頁" 的 GET請求

Scrapy 優點

  • HTTP請求的傳送和響應的處理是非同步的。
  • 可以連續傳送多個請求,不必的等待是一個請求的響應處理完成。
  • 當一個請求在傳送/處理的過程中發生錯誤時,不會影響其他請求。

限速

為了避免 scrapy 快速地傳送多個請求,可以使用一些設定來進行限速:

  • 在 settings.py 中配置請求之間的延遲;每個網站的執行緒數
  • 在 settings.py 中配置 auto-throttling 擴充套件,根據前面的響應時間自動除錯請求間的延遲

儲存結果

  • 通過 feed exports 可以將結果儲存為 csv, json, jl, xml 格式 或 儲存到 FTP, Amazon S3 上
  • 通過 pipeline 可以將結果儲存到資料庫中

Scrapy 的其他優點:

  • 通過 XPath, CSS選擇器,正則表示式 提取資料
  • 通 IPython 來測試提取表示式
  • 內建將結果儲存為多種格式和儲存系統
  • 強大的 HTTP 解碼能力
  • 通過 signals, middlewares, extensions, pipeline 來擴充套件 scrapy
  • 自帶的擴充套件和中介軟體用於處理 cookie, session, http 快取/認證, robots.txt, User-Agent, 爬取深度限制
  • 通過 Telnet console 用來除錯正在執行低爬蟲