Scrapy爬虫入門チュートリアル12 Link Extractors(リンク抽出器)

3555 ワード

Pythonバージョン管理:pyenvとpyenv-virtualenv Scrapy爬虫入門チュートリアルインストールと基本使用Scrapy爬虫入門チュートリアル2公式提供Demo Scrapy爬虫入門チュートリアル3コマンドラインツール紹介と例Scrapy爬虫入門チュートリアル4 Spider(爬虫)Scrapy爬虫入門チュートリアル5 Selectors(セレクタ)Scrapy爬虫入門チュートリアル6 Items(プロジェクト)Scrapy爬虫入門チュートリアル7 Item Loaders(プロジェクトローダー)Scrapy爬虫入門チュートリアル8インタラクティブshell Scrapy爬虫入門チュートリアル9 Item Pipeline(プロジェクトパイプ)Scrapy爬虫入門チュートリアル10 Feed exports(エクスポートファイル)Scrapy爬虫入門チュートリアル10 1 RequestとResponse(リクエストと応答)Scrapy爬虫入門チュートリアル12 Link Extractors(リンク抽出器)
開発環境:Python 3.6.0 (現在の最新)Scrapy 1.3.2 (現在の最新)
リンク抽出
リンク抽出器は、scrapy.http.Responseが最終的にフォローするウェブページ(オブジェクト)からリンクされたオブジェクトを抽出することを唯一の目的とする.
Scrapyはありますが、独自のカスタムリンク抽出器を作成して、簡単なインタフェースを実現する必要があることを満たすことができます.scrapy.linkextractors import LinkExtractor
各リンク抽出器の唯一の共通の方法は、extract_linksがResponseオブジェクトを受信し、scrapy.link.Linkオブジェクトのリストを返すことである.リンク抽出器は、一度インスタンス化されることを意図し、それらのextract_linksメソッドは、追従するリンクを抽出するために異なる応答を有する数回呼び出される.
リンク抽出プログラムCrawlSpiderは、ルールのセットを使用してクラスで使用されます(Scrapyで使用できます).ただし、CrawlSpiderからサブクラスを抽出しなくても、爬虫類で使用することもできます.その目的は非常に簡単です.リンクを抽出します.
組み込みリンクエクスプローラリファレンスscrapy.linkextractorsモジュールには、Scrapyにバンドルされたリンク抽出器クラスが用意されています.
デフォルトのリンク抽出器はLinkExtractorで、同じLxmlLinkExtractorです.
from scrapy.linkextractors import LinkExtractor

以前のScrapyバージョンでは他のリンク抽出器クラスがあったが、今では時代遅れだ.
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の強力なHTML Parserを使用して実装されています.
**パラメータ:**
  • allow(正規表現(またはリスト))-urlsを抽出するには、単一の正規表現(または正規表現リスト)を一致させる必要があります.指定されていない(または空)場合は、すべてのリンクに一致します.
  • deny(正規表現または正規表現のリスト)-正規表現(または正規表現のリスト)urlsを除外するには、urlsが一致する必要があります(つまり、抽出しません).allowパラメータよりも優先されます.指定されていない(または空)場合は、リンクは除外されません.
  • allow_domains(strまたはlist)-リンクを抽出するために考慮されるドメインを含む単一の値または文字列リスト
  • deny_domains(strまたはlist)-リンクを抽出するために考慮されないドメインを含む単一の値または文字列リスト
  • deny_extensions(list)-リンクの抽出時に無視すべき拡張の単一値または文字列のリストが含まれます.指定されていない場合、デフォルトはIGNORED_です.EXTENSIONSはscrapyにあります.linkextractorsパッケージで定義されているリスト.
  • restrict_xpaths(strまたはlist)-レスポンスからリンクを抽出する領域を定義するXPath(またはXPathのリスト)です.与えられた場合、XPathで選択されたテキストのみがスキャンされます.次の例を参照してください.
  • restrict_css(strまたはlist)-応答でリンクを抽出する領域を定義するCSSセレクタ(またはセレクタリスト)です.同じ動作restrict_xpaths. 「ラベル」(strまたはlist)-ラベルまたはリンクの抽出時に考慮するラベルのリスト.デフォルトはです.('a', 'area')
  • attrs(list)-抽出するリンクを検索するときに考慮すべき属性または属性のリスト(パラメータで指定されたラベルtagsにのみ適用されます).デフォルトは('href',)
  • です.
  • canonicalize(boolean)-各抽出urlを正規化します(w 3 lib.url.canonicalize_urlを使用します).デフォルトはTrueです.
  • unique(boolean)-抽出されたリンクアプリケーションに対して重複フィルタリングを適用するかどうか.
  • process_value(callable)-ラベルから抽出された各値とスキャンのプロパティを受信し、値を変更して新しい値の関数を返すか、リンクを完全に無視するためにNoneを返します.与えられなかったらプロセスvalueのデフォルトはです.lambda x: x

  • たとえば、このコードからリンクを抽出するには、次のようにします.
    Link text
    

    次の機能process_を使用できます.value:
    def process_value(value):
        m = re.search("javascript:goToPage\('(.*?)'", value)
        if m:
            return m.group(1)