パラメータで正規表現を使用するか、allow
パラメータでテスト関数を使用できprocess_value
ます。(ドキュメントを参照してください。)
どちらにも長所と短所があり、ページ内のリンクがどのように見えるかによって異なります。正規表現を使用する場合は、完全修飾 URL (つまり、http://domain.com/foo/bar ) に対してテストします。このパラメーターを使用するprocess_value
と、Web ページで見つかった生の値が取得されます (つまり、/foo/bar またはさらに悪い場合は相対リンク)。
たとえば、正規表現は次のようにdomain.com/(?:\w+/){1,3}\w+$
一致します
domain.com/foo/bar
domain.com/foo/bar/foo
domain.com/foo/bar/foo/bar
だがしかし
domain.com/foo/
domain.com/foo/bar/foo/bar/foo
を使用すると、process_value
このような機能が機能します
def filter_path(value):
# at least 2, at most 3 /'s
if 1 < value.count('/') < 4:
return value
上記の関数は、html リンク/foo
に/foo/bar/foo
、 などの href の値があることを前提としています。
特定のケースでは、正規表現は のようdomain.com/static/(?:\w+/){3}otherstuff
になり、関数はサフィックスfilter_path
をチェックする場合があります。value.startswith('/static/')
Rule
でクラスを使用している場合は、3 番目のオプションがありますCrawlSpider
。パラメータを使用すると、process_links
リンク リストを処理する関数を渡すことができます。例えば
def url_allowed(url):
# check for the pattern /static/dir/dir/dir/ etc
return True
def process_links(links):
return [l for l in links if url_allowed(l.url)]