Scrapy-xpth-tips

提供:Dev Guides
移動先:案内検索

スクレイピー-Xpath Tips

条件でのテキストノードの使用

XPath文字列関数でテキストノードを使用している場合、。//text()*を使用する代わりに。(dot)を使用します。これにより、 *node-set と呼ばれるテキスト要素のコレクションが生成されるためです。

例えば-

from scrapy import Selector
val = Selector(text = '<a href = "#">More Info<strong>click here</strong></a>')

あなたがノードセットを文字列に変換している場合は、次の形式を使用します-

>>val.xpath('//a//text()').extract()

次のように要素を表示します-

[u'More Info',u'click here']

and

>>val.xpath("string('//a[1]//text())").extract()

結果として要素を-

[u'More Info']

===//node [1]と(//node)[1]の違い

*//node [1]* は、それぞれの親の下で定義された最初の要素をすべて表示します。 *(//node)[1] *は、ドキュメントの最初の要素のみを表示します。

例えば-

from scrapy import Selector
val = Selector(text = """
   <ul class = "list">
      <li>one</li>
      <li>one</li>
      <li>one</li>
   </ul>

   <ul class = "list">
      <li>four</li>
      <li>five</li>
      <li>six</li>
   </ul>""")
res = lambda x: val.xpath(x).extract()

次の行は、それぞれの親の下で定義されたすべての最初の li 要素を表示します-

>>res("//li[1]")

結果は次のように表示されます-

[u'<li>one</li>', u'<li>four</li>']

次のように表示される完全なドキュメントの最初の li 要素を取得できます-

>>res("(//li)[1]")

結果は次のように表示されます-

[u'<li>one</li>']

また、 ul parentの下で定義されている最初の li 要素をすべて表示することもできます-

>>res("//ul//li[1]")

結果は次のように表示されます-

[u'<li>one</li>', u'<li>four</li>']

あなたは次のように示されている文書全体の ul 親の下で定義された最初の li 要素を取得することができます

>>res("(//ul//li)[1]")

結果は次のように表示されます-

[u'<li>one</li>']

組み込みセレクタリファレンス

組み込みのセレクタには、次のクラスが含まれます-

class scrapy.selector.Selector(response = None, text = None, type = None)

上記のクラスには、次のパラメータが含まれています-

  • response -データを選択および抽出するHTMLResponseおよびXMLResponseです。
  • text -利用可能な応答がない場合、UTF-8文字エンコードを使用してすべての文字をエンコードします。
  • type -HTML応答のhtml、XMLResponse型のxml、デフォルトの型のnoneなど、さまざまなセレクタ型を指定します。 応答タイプに応じてタイプを選択するか、テキストで使用される場合はデフォルトでhtmlに設定します。

組み込みのセレクタには、次のメソッドが含まれています-

Sr.No Method & Description
1

xpath(query)

xpathクエリに従ってノードを照合し、SelectorListインスタンスとして結果を提供します。 パラメータqueryは、使用するXPATHクエリを指定します。

2

css(query)

CSSセレクターを提供し、SelectorListインスタンスを返します。 パラメータクエリは、使用するCSSセレクタを指定します。

3

extract()

一致するすべてのノードをUnicode文字列のリストとして取り出します。

4

re(regex)

正規表現を提供し、一致するノードをUnicode文字列のリストとして取り出します。 パラメーターregexは、re.compile(regex)メソッドを使用して正規表現にコンパイルされる正規表現または文字列として使用できます。

5

register_namespace(prefix, uri)

セレクタで使用される名前空間を指定します。 非標準のネームスペースからネームスペースを登録せずにデータを抽出することはできません。

6

remove_namespaces()

名前空間を破棄し、名前空間のないxpathを使用してドキュメントを走査する許可を与えます。

7

nonzero()

コンテンツが選択されている場合、このメソッドはtrueを返し、そうでない場合はfalseを返します。

SelectorListオブジェクト

class scrapy.selector.SelectorList

SelectorListオブジェクトには、次のメソッドが含まれています-

Sr.No Method & Description
1

xpath(query)

要素に対して.xpath()メソッドを使用し、結果をSelectorListインスタンスとして提供します。 パラメータクエリは、Selector.xpath()メソッドで定義された引数を指定します。

2

css(query)

要素に対して.css()メソッドを使用し、SelectorListインスタンスとして結果を返します。 パラメータークエリは、Selector.css()メソッドで定義された引数を指定します。

3 extract()
4

re()

要素に対して.re()メソッドを使用し、Unicode文字列のリストとして要素を引き出します。

5

nonzero()

リストが空でない場合、このメソッドはtrueを返し、そうでない場合はfalseを返します。

SelectorListオブジェクトには、このリンクで説明されているいくつかの概念が含まれています:/scrapy/selectorlist_objects [link]。