3

こんにちは、Scrapy CrawlSpider クラス (ドキュメントはこちら)を使用して Web のすべてのページをクロールしたいと考えています。

class MySpider(CrawlSpider):
    name = 'abc.com'
    allowed_domains = ['abc.com']
    start_urls = ['http://www.abc.com']

    rules = (
        Rule(SgmlLinkExtractor(allow=('item\.php', )), callback='parse_item')
    )

    def parse_item(self, response):
        self.log('Hi, this is an item page! %s' % response.url)
        ...

(1) したがって、このスパイダーは、start_urls で定義されているページ: www.abc.com から開始し、自動的に解析を行います...ルールでしょ?特定の数のレイヤーのみをスクレイピングできる方法があるのではないかと思っています..最初のレイヤーのみをスクレイピングすると言います(www.abc.comから直接派生したリンク)?

(2) allowed_deomains で定義したので、abc.com の URL のみがスクレイピングされます。ルールでそれを再定義する必要はありませんか?次のようにします。

Rule(SgmlLinkExtractor(allow=('item\.php', )), allow_domains="www.abc.com", callback='parse_item')

(3) クロールスパイダーを使用している場合、スパイダー クラスでルールを定義しないとどうなりますか? すべてのページをクロールしますか? それとも、ルールが「満たされていない」ため、どのルールにも従わないでしょうか?

4

1 に答える 1

3
  1. DEPTH_LIMIT設定を設定します。

    DEPTH_LIMIT¶

    デフォルト: 0

    どのサイトでもクロールできる最大の深さ。ゼロの場合、制限は課されません。

  2. いいえ、追加の URL チェックを追加する必要はありません。allow_domainsレベルで指定しない場合、ドメインRuleを持つ URL のみが抽出されます。abc.com

  3. ルールを定義しない場合、URL は抽出されません (のように機能しますBaseSpider)。

それが役立つことを願っています。

于 2013-09-19T17:58:31.300 に答える