3、scrapy基本概念介紹

本篇介紹scrapy的命令行工具、重要組件和重要對象。

scrapy 命令行工具

  • help:幫助信息(scrapy --help)
  • version:版本信息,可以添加-v查看scrapy各個組件的信息(scrapy version -v)
  • startproject:新建一個工程(scrapy startproject example)
  • genspider:產(chǎn)生一個spider(scrapy genspider example example.com)
  • list:查看本工程中包含的spiders
  • view:在瀏覽器中打開網(wǎng)頁,這個網(wǎng)頁就是scrapy處理的網(wǎng)頁(scrapy view http://example.com
  • parse:解析一個URL(使用對應(yīng)的spider),打印結(jié)果
  • shell:可交互的scrapy爬取控制臺
  • runspider:運行一個自包含的爬蟲,即沒有創(chuàng)建工程
  • bench:基準測試

scrapy的重要組件

Spider

基本介紹

Spider是一個類,它定義了怎樣爬取一個網(wǎng)站,包括怎樣跟蹤鏈接、怎樣提取數(shù)據(jù)。

執(zhí)行流程:

  • 根據(jù)start_urls產(chǎn)生初始Requests
  • 解析responce
  • 使用selector
  • 存儲items

zaobao Spider

這里寫圖片描述
基類介紹(scrapy.Spider)
  • 屬性
  • name:spider的名稱,同一工程中唯一
  • allowed_domains:允許的域名
  • start_urls:初始urls
  • custom_settings:個性化設(shè)置,覆蓋全局設(shè)置(settings.py)
  • crawler:抓取器,spider將綁定到它上面
  • settings:配置實例,包含工程中所有的配置變量
  • logger:日志實例
  • 方法
  • from_crawler(crawler, *args, **kwargs):類方法,用于創(chuàng)建spiders
  • start_requests():生成初始的requests
  • make_requests_from_url(url):根據(jù)url生成一個request
  • parse(response):解析網(wǎng)頁內(nèi)容
  • log(message[, level, component]):兼容老版本
  • self.logger.info("log內(nèi)容")
  • closed(reason):當spider關(guān)閉的時候調(diào)用的方法
子類介紹
CrawlerSpider
  • 最常用的spider,用于抓取普通網(wǎng)頁
  • 和基類比較增加了兩個成員
  • rules:定義了一些抓取規(guī)則(鏈接怎么跟蹤、使用哪一個parse函數(shù)解析此鏈接)
  • parse_start_url(response):解析初始url產(chǎn)生的response

示例

這里寫圖片描述
XMLFeedSpider
CSVFeedSpider
SitemapSpider

Selector

scrapy默認使用Selector作為網(wǎng)頁解析工具

實例化
這里寫圖片描述
常用方法
  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數(shù)據(jù)
  2. 驗證抓取到的數(shù)據(jù)(檢查是否有數(shù)據(jù))
  3. 檢查是否重復(fù)(然后丟棄重復(fù)數(shù)據(jù))
  4. 存儲數(shù)據(jù)到數(shù)據(jù)庫中
示例
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里面設(shè)置

ITEM_PIPELINES = {
    'myproject.pipelines.PricePipeline': 300
}

優(yōu)先級0-1000,越小越優(yōu)先

Feed exports

存儲抓取到的數(shù)據(jù)

  • json
  • json lines
  • csv
  • xml

scrapy的重要對象

Request

  • scrapy.http.Request的初始化參數(shù)
  • 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實現(xiàn)登陸功能

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

示例

這里寫圖片描述

Response

  1. scrapy.http.Response的初始化參數(shù)
  • url:必須參數(shù)
  • 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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容