Scrapyラーニングノート02-セレクタ

3096 ワード

原文アドレス:LoveDev
Scrapy抽出データには独自のメカニズムがあります.これらはセレクタ(seletors)と呼ばれ、HTMLファイルの一部を特定のXPathまたはCSS式で選択します.

XPath


XPathはXMLドキュメントで情報を検索する言語で、CSSはHTMLドキュメントをスタイル化する言語で、本文は主にXPathを紹介する.
1つの画像を例に挙げます.



ノード


XPathには、要素、属性、テキスト、ネーミングスペース、処理命令、注釈、ルートノードの7種類のノードがあります.XMLドキュメントはノードツリーとして扱われる.ツリーのルートはルートノードと呼ばれます.
上記の例では、
  • div:ルートノード
  • table:要素ノード
  • href:属性ノード
  • ノードの選択


    Expression
    Alias
    nodename
    現在のノードの下にあるすべてのサブノードを選択
    /
    絶対パス
    //
    ドキュメント内のすべてのノード
    .
    現在のノード
    ..
    親ノード
    @
    属性の選択
    見覚えがあるのではないでしょうか.コマンドライン操作と似ています
    Expression
    Alias
    div
    divの下のすべてのサブノード
    /div
    divルートノード
    div/table
    divサブエレメント内のすべてのtableノード
    //img
    すべてのimgノード
    div//img
    div子孫要素のすべてのtableノード
    //@src
    srcという名前のすべてのプロパティ

    述語


    述部特定のノードまたは指定した値を含むノードを検索します.
    Expression
    Alias
    //img[@alt="1"]
    alt値が1のノードにおけるsrc属性の値
    //a/img[1]
    a中性子元素の最初のimg元素
    //a/img[last()]
    a中性子元素の最後のimg元素

    値の取得


    Expression
    Alias
    //img[@alt="1"]/@src
    alt値が1のノードにおけるsrc属性の値
    /div/@class
    divルートノードのclassプロパティの値
    //a/div/text()
    divノードのhello,world

    近道


    偉大なchromeはXPathを直接コピーする機能を提供しており、開発者ツールで右クリックノードがCopy->Copy XPathを選択すると、XPathの絶対パスを得ることができます.

    セレクタ


    ResponseでXPath、CSSクエリーを使用するのは一般的であるため、Scrapyは2つの実用的なショートカットを提供しています:response.xpath()およびresponse.css():

    ひょうじゅんセレクタ

    # alt    1 img  
    response.xpath('//img[@alt="1"]')
    
    xpath()およびcss()は、新しいセレクタのリストであるSelectorListクラスのインスタンスを返し、SelectorListクラスは、listクラスを内蔵するサブクラスであり、いくつかの追加の方法を提供する.
    Method
    Alias
    xpath(query)
    結果は単一化されたSelectorList
    css(query)
    結果は単一化されたSelectorList
    extract()
    実際の原文データを抽出し、単一化されたunicode文字列リストにします.
    re()
    正規表現でデータを抽出し、単一化されたunicode文字列のリストになります.
    nonzero()
    リストが空でない場合はTrueを返します.そうでない場合はFalseを返します.

    ネストセレクタ

    #   src  ,  src      doubanio    img  
    response.xpath('//img[contains(@src, "doubanio")]')
    

    正規のセレクタ


    Selectorには.re()の方法があり、例えばScrapy学習ノート01-初視では、正規表現によってデータを抽出するために使用することができる.
    #    “12345  ”   12345
    item['commentsNum'] = sel.xpath('div[2]/div[2]/div/span[4]/text()').re(r'[\d]+')[0]
    
  • 括弧の中の最初のrは文字列が非変換の元の文字列であることを表し、変換文字の有無にかかわらず
  • を加えることを強く推奨する.