天天看點

3、scrapy基本概念介紹

本篇介紹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

3、scrapy基本概念介紹

基類介紹(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

示例

3、scrapy基本概念介紹

XMLFeedSpider CSVFeedSpider SitemapSpider

Selector

scrapy預設使用Selector作為網頁解析工具

執行個體化
3、scrapy基本概念介紹
常用方法
  1. xpath
  2. css
  3. re
  4. extract
  5. extract_first

Item

示例

import scrapy


class Product(scrapy.Item):
    name = scrapy.Field()
    price = scrapy.Field()
    stock = scrapy.Field()
           

Item Pipeline

作用
  1. 清洗HTML資料
  2. 驗證抓取到的資料(檢查是否有資料)
  3. 檢查是否重複(然後丢棄重複資料)
  4. 存儲資料到資料庫中
示例
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()

示例

3、scrapy基本概念介紹

- 子類

FormRequest實作登陸功能

class scrapy.http.FormRequest(url[, formdata…])

示例

3、scrapy基本概念介紹

Response

  1. scrapy.http.Response的初始化參數
    • url:必須參數
    • status=200
    • headers
    • body
    • flags
  2. 其他成員
    • url
    • status
    • headers
    • body
    • resquest
    • meta
    • flags
    • copy()
    • replace()
    • urljoin(url)
  3. 子類
    • scrapy.http.TextResponse(它有兩個子類)
    • scrapy.http.HtmlResponse
    • scrapy.http.XmlResponse

繼續閱讀