本篇介紹scrapy的指令行工具、重要元件和重要對象。
scrapy 指令行工具
- help:幫助資訊(scrapy –help)
- version:版本資訊,可以添加-v檢視scrapy各個元件的資訊(scrapy version -v)
- startproject:建立一個工程(scrapy startproject example)
- genspider:産生一個spider(scrapy genspider example example.com)
- list:檢視本工程中包含的spiders
- view:在浏覽器中打開網頁,這個網頁就是scrapy處理的網頁(scrapy view http://example.com)
- parse:解析一個URL(使用對應的spider),列印結果
- shell:可互動的scrapy爬取控制台
- runspider:運作一個自包含的爬蟲,即沒有建立工程
- bench:基準測試
scrapy的重要元件
Spider
基本介紹
Spider是一個類,它定義了怎樣爬取一個網站,包括怎樣跟蹤連結、怎樣提取資料。
執行流程:
- 根據start_urls産生初始Requests
- 解析responce
- 使用selector
- 存儲items
zaobao Spider

基類介紹(scrapy.Spider)
- 屬性
- name:spider的名稱,同一工程中唯一
- allowed_domains:允許的域名
- start_urls:初始urls
- custom_settings:個性化設定,覆寫全局設定(settings.py)
- crawler:抓取器,spider将綁定到它上面
- settings:配置執行個體,包含工程中所有的配置變量
- logger:日志執行個體
- 方法
- from_crawler(crawler, *args, **kwargs):類方法,用于建立spiders
- start_requests():生成初始的requests
- make_requests_from_url(url):根據url生成一個request
- parse(response):解析網頁内容
- log(message[, level, component]):相容老版本
- self.logger.info(“log内容”)
- closed(reason):當spider關閉的時候調用的方法
子類介紹
CrawlerSpider
- 最常用的spider,用于抓取普通網頁
- 和基類比較增加了兩個成員
- rules:定義了一些抓取規則(連結怎麼跟蹤、使用哪一個parse函數解析此連結)
- parse_start_url(response):解析初始url産生的response
示例
XMLFeedSpider CSVFeedSpider SitemapSpider
Selector
scrapy預設使用Selector作為網頁解析工具
執行個體化
常用方法
- xpath
- css
- re
- extract
- extract_first
Item
示例
import scrapy
class Product(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
stock = scrapy.Field()
Item Pipeline
作用
- 清洗HTML資料
- 驗證抓取到的資料(檢查是否有資料)
- 檢查是否重複(然後丢棄重複資料)
- 存儲資料到資料庫中
示例
from scrapy.exceptions import DropItem
class PricePipeline(object):
vat_factor =
def process_item(self, item, spider):
if item['price']:
if item['price_excludes_vat']:
item['price'] = item['price'] * self.vat_factor
return item
else:
raise DropItem("Missing price in %s" % item)
激活pipeline
在
settings.py
裡面設定
ITEM_PIPELINES = {
'myproject.pipelines.PricePipeline':
}
優先級0-1000,越小越優先
Feed exports
存儲抓取到的資料
- json
- json lines
- csv
- xml
scrapy的重要對象
Request
- scrapy.http.Request的初始化參數
- url:必須
- callback
- method=‘GET’
- headers
- body
- cookies
- meta
- encoding=’utf-8’
- priority=0
- don’t_filter=False
- errback
- 其它屬性
- url
- method
- headers
- body
- cookies
- meta
- copy()
- replace()
示例
- 子類
FormRequest實作登陸功能
class scrapy.http.FormRequest(url[, formdata…])
示例
Response
- scrapy.http.Response的初始化參數
- url:必須參數
- status=200
- headers
- body
- flags
- 其他成員
- url
- status
- headers
- body
- resquest
- meta
- flags
- copy()
- replace()
- urljoin(url)
- 子類
- scrapy.http.TextResponse(它有兩個子類)
- scrapy.http.HtmlResponse
- scrapy.http.XmlResponse