こんにちは、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) クロールスパイダーを使用している場合、スパイダー クラスでルールを定義しないとどうなりますか? すべてのページをクロールしますか? それとも、ルールが「満たされていない」ため、どのルールにも従わないでしょうか?