CrawlSpiderを使用してサイトをクロールし、内部リンクを通過し、外部リンクの内容(元のドメインとは異なるドメインのリンク)をスクレイプするScrapyスクレイパーを作成しています。Scrapy CrawlSpiderのstart_urlsに基づく動的ルール?
私は2つのルールで管理しましたが、クロール対象のサイトのドメインに基づいています。これを複数のWebサイトで実行したい場合は、私が現在実行している「start_url」がわからないため、ルールが適切に変更できないため、問題が発生します。
は、ここで私はこれまでのところ、それは1つのウェブサイトのために働くと私はウェブサイトのリストにそれを適用するかどうかはわかりません思い付いたものです:
class HomepagesSpider(CrawlSpider):
name = 'homepages'
homepage = 'http://www.somesite.com'
start_urls = [homepage]
# strip http and www
domain = homepage.replace('http://', '').replace('https://', '').replace('www.', '')
domain = domain[:-1] if domain[-1] == '/' else domain
rules = (
Rule(LinkExtractor(allow_domains=(domain), deny_domains=()), callback='parse_internal', follow=True),
Rule(LinkExtractor(allow_domains=(), deny_domains=(domain)), callback='parse_external', follow=False),
)
def parse_internal(self, response):
# log internal page...
def parse_external(self, response):
# parse external page...
これはおそらくちょうど渡すことで行うことができますstart_urlをスクレイパーを呼び出す際に引数として使用しますが、スクレーパー自体でプログラムで行う方法を探しています。
アイデア? ありがとう!
サイモン。
いいえ、外部リンクの内容を掻きました。内部リンクは削られず、ウェブサイト上のすべての外部リンクを見つけるためにクロールされるだけです。 – Simon
@Simon次に、 'parse_internal'でセレクタをデバッグする必要があります。正しくない可能性があります – Umair
どのように間違っていますか?私はあなたが質問の段落を逃したかもしれないと思います。私は、コードが動作しているという質問に書いていますが、私はこれを複数のstart_urlsに適用する方法を探しています。 – Simon