リンク抽出器(link extractors)¶
リンク抽出器(link extractor)は、レスポンスからリンクを抽出するオブジェクトです。
LxmlLinkExtractor
の __init__
メソッドは、抽出されるリンクを決める設定を取得します。 LxmlLinkExtractor.extract_links
は、 Response
オブジェクトからマッチする Link
オブジェクトのリストを返します。
リンク抽出器は、 Rule
オブジェクトの組を介して CrawlSpider
スパイダー群で使用されます。
あなたは、通常のスパイダーでリンク抽出器を使用することもできます。 たとえば、 LinkExtractor
をスパイダーのクラス変数としてインスタンス化し、そしてそれをスパイダー・コールバックから使用します:
def parse(self, response):
for link in self.link_extractor.extract_links(response):
yield Request(link.url, callback=self.parse)
リンク抽出器リファレンス¶
リンク抽出器クラスは scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor
です。 便宜上、 scrapy.linkextractors.LinkExtractor
としてインポートすることもできます:
from scrapy.linkextractors import LinkExtractor
LxmlLinkExtractor¶
- class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), deny_extensions=None, restrict_xpaths=(), restrict_css=(), tags=('a', 'area'), attrs=('href'), canonicalize=False, unique=True, process_value=None, strip=True)[ソース]¶
LxmlLinkExtractorは、便利なフィルタリングオプションを備えた、おすすめのリンク抽出器です。lxmlの堅牢なHTMLParserを使用して実装されています。
- パラメータ
allow (str or list) -- (絶対)URLが抽出されるために一致する必要がある単一の正規表現(または正規表現のリスト)。指定しない場合(または空の場合)は、すべてのリンクに一致します。
deny (str or list) -- (絶対)URLが除外される(抽出されない)ために一致する必要がある単一の正規表現(または正規表現のリスト)。
allow
パラメータよりも優先されます。指定されていない(または空の)場合、リンクは除外されません。allow_domains (str or list) -- リンクを抽出するために考慮されるドメインを含む単一の値または文字列のリスト
deny_domains (str or list) -- リンクを抽出するために 考慮されない ドメインを含む単一の値または文字列のリスト
deny_extensions (list) --
リンクを抽出するときに無視する必要がある拡張子を含む単一の値または文字列のリスト。 指定しない場合、デフォルトで
scrapy.linkextractors.IGNORED_EXTENSIONS
になります。バージョン 2.0 で変更:
IGNORED_EXTENSIONS
は、現在は以下を含んでいます7z
、7zip
、apk
、bz2
、cdr
、dmg
、ico
、iso
、tar
、tar.gz
、webm
、xz
restrict_xpaths (str or list) -- これは、リンクを抽出するレスポンス内の領域を定義するXPath(またはXPathのリスト)です。指定すると、それらのXPathによって選択されたテキストのみがリンクをスキャンされます。以下の例を参照してください。
restrict_css (str or list) -- リンクを抽出するレスポンス内の領域を定義するCSSセレクター(またはセレクターのリスト)。
restrict_xpaths
と同じ動作をします。restrict_text (str or list) -- リンクのテキストが抽出されるために一致する必要がある単一の正規表現(または正規表現のリスト)。指定しない場合(または空の場合)は、すべてのリンクに一致します。正規表現のリストが指定されている場合、リンクが少なくとも1つと一致するとリンクが抽出されます。
tags (str or list) -- リンクを抽出するときに考慮するタグまたはタグのリスト。 デフォルトは
('a', 'area')
です。attrs (list) -- 抽出するリンクを探すときに考慮する必要がある属性または属性のリスト(
tags
パラメータで指定されたタグのみ)。デフォルトは('href',)
canonicalize (bool) -- 抽出された各URLを正規化します(w3lib.url.canonicalize_urlを使用)。 デフォルトは
False
です。canonicalize_urlは重複チェックを目的としていることに注意してください。サーバー側で表示されるURLを変更できるため、正規化されたURLと生のURLを使用したリクエストのレスポンスが異なる場合があります。LinkExtractorを使用してリンクをたどっている場合、デフォルトのcanonicalize=False
のままにしておいた方がより堅牢です。unique (bool) -- 抽出されたリンクに重複フィルタリングを適用するかどうか。
process_value (collections.abc.Callable) --
タグから抽出された各値とスキャンされた属性を受け取り、値を変更して新しい値を返すか、リンクを完全に無視するために
None
を返すことができる関数。 指定しない場合、process_value
のデフォルトはlambda x: x
になります。たとえば、このコードからリンクを抽出するには:
<a href="javascript:goToPage('../other/page.html'); return false">Link text</a>
あなたは
process_value
で次の関数を使用できます:def process_value(value): m = re.search("javascript:goToPage\('(.*?)'", value) if m: return m.group(1)
strip (bool) -- 抽出された属性から空白を削除するかどうか。HTML5標準によれば、先頭と末尾の空白は、
<a>
や<area>
のhref
属性や他の多くの要素、<img>
や<iframe>
のsrc
属性、などから削除する必要があります。そのためLinkExtractorはデフォルトでスペース文字を削除します。オフにするにはstrip=False
を設定します(たとえば、先頭または末尾の空白を許可する要素または属性からURLを抽出する場合)。
Link¶
- class scrapy.link.Link(url, text='', fragment='', nofollow=False)[ソース]¶
Linkオブジェクトは、LinkExtractorによって抽出されたリンクを表します。
以下のアンカー・タグの例にてパラメータを説明します:
<a href="https://example.com/nofollow.html#foo" rel="nofollow">Dont follow this one</a>
- パラメータ
url -- アンカー・タグでリンクされている絶対URL。 例では、
https://example.com/nofollow.html
の部分です。text -- アンカー・タグのテキスト。 例では
Dont follow this one
の部分です。fragment -- ハッシュ記号の後のURLの部分。 例では
foo
の部分です。nofollow -- アンカー・タグの
rel
属性にnofollow値が存在するかどうかを示します。