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

這里寫圖片描述
基類介紹(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作為網頁解析工具

實例化
這里寫圖片描述
常用方法
  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 = 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

  1. scrapy.http.Response的初始化參數
  • url:必須參數
  • status=200
  • headers
  • body
  • flags
  1. 其他成員
  • url
  • status
  • headers
  • body
  • resquest
  • meta
  • flags
  • copy()
  • replace()
  • urljoin(url)
  1. 子類
  • scrapy.http.TextResponse(它有兩個子類)
  • scrapy.http.HtmlResponse
  • scrapy.http.XmlResponse
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容