Scrapy-link-extractors
スクレイピー-リンク抽出
説明
名前自体が示すように、リンクエクストラクターは、 scrapy.http.Response オブジェクトを使用してWebページからリンクを抽出するために使用されるオブジェクトです。 Scrapyには、 scrapy.linkextractors import LinkExtractor などの組み込みエクストラクターがあります。 シンプルなインターフェースを実装することにより、ニーズに応じて独自のリンク抽出ツールをカスタマイズできます。
すべてのリンク抽出プログラムには、 extract_links と呼ばれるパブリックメソッドがあり、Responseオブジェクトを含み、scrapy.link.Linkオブジェクトのリストを返します。 リンクエクストラクターを1回だけインスタンス化し、extract_linksメソッドを何度も呼び出して、異なる応答のリンクを抽出できます。 CrawlSpiderclassは、リンクを抽出することを主な目的とする一連のルールでリンクエクストラクターを使用します。
組み込みのLink Extractorのリファレンス
通常、リンク抽出はScrapyでグループ化され、scrapy.linkextractorsモジュールで提供されます。 デフォルトでは、リンク抽出はLinkExtractorになり、LxmlLinkExtractorと機能的に同等です-
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 = True, unique = True, process_value = None)
_LxmlLinkExtractor_は、便利なフィルタリングオプションがあり、lxmlの堅牢なHTMLParserで使用されるため、非常に推奨されるリンク抽出ツールです。
Sr.No | Parameter & Description |
---|---|
1 |
抽出されるURLに一致する単一の式または式のグループを許可します。 記載されていない場合は、すべてのリンクに一致します。 |
2 |
抽出されないURLに一致する単一の式または式のグループをブロックまたは除外します。 言及されていないか空のままになっている場合、不要なリンクは削除されません。 |
3 |
リンクの抽出元のドメインに一致する単一の文字列または文字列のリストを許可します。 |
4 |
リンクが抽出されないドメインに一致する単一の文字列または文字列のリストをブロックまたは除外します。 |
5 |
リンクを抽出するときに、拡張子を持つ文字列のリストをブロックします。 設定されていない場合、デフォルトで_IGNORED_EXTENSIONS_に設定され、_scrapy.linkextractors_パッケージに事前定義されたリストが含まれます。 |
6 |
これは、リンクが応答から抽出されるXPathリスト領域です。 指定すると、リンクはXPathによって選択されたテキストからのみ抽出されます。 |
7 |
応答内のCSSで選択された領域からリンクを抽出するrestrict_xpathsパラメーターと同様に動作します。 |
8 |
リンクを抽出するときに考慮する必要がある単一のタグまたはタグのリスト。 デフォルトでは、(「a」、「area」)になります。 |
9 |
リンクを抽出する際には、単一の属性または属性のリストを考慮する必要があります。 デフォルトでは、(「href」)になります。 |
10 |
抽出されたURLは、_scrapy.utils.url.canonicalize_url_を使用して標準形式になります。 デフォルトでは、Trueになります。 |
11 |
抽出されたリンクが繰り返される場合に使用されます。 |
12 |
これは、スキャンされたタグと属性から値を受け取る関数です。 受信した値は変更されて返されるか、リンクを拒否するために何も返されません。 使用しない場合、デフォルトではラムダx:xになります。 |
例
次のコードは、リンクを抽出するために使用されます-
<a href = "javascript:goToPage('../other/pagel'); return false">Link text</a>
次のコード関数はprocess_valueで使用できます-
def process_value(val):
m = re.search("javascript:goToPage\('(.*?)'", val)
if m:
return m.group(1)