本篇介紹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 = 1.15
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': 300
}
優先級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