1.Scrapy at a glance
阿新 • • 發佈:2018-11-15
簡介
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 用來除錯正在執行低爬蟲