您好,我想使用 Scrapy CrawlSpider 类抓取网络的所有页面(文档在这里 http://doc.scrapy.org/en/0.18/topics/spiders.html#crawlspider-example).
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 中的每个链接,该链接位于规则对吗?我想知道有没有办法让我只能刮一定数量的层..比如说只刮第一层(直接来自 www.abc.com 的链接)?
(2) 由于我在 allowed_deomains 中定义了只有 abc.com 网址会被抓取。所以我不需要在规则中重新定义它?并做这样的事情:
Rule(SgmlLinkExtractor(allow=('item\.php', )), allow_domains="www.abc.com", callback='parse_item')
(3)如果我使用crawlspider,如果我不在spider类中定义规则会发生什么?它会抓取所有页面吗?或者它甚至不会遵循任何一条,因为规则尚未得到“满足”?
-
Set 深度限制 http://doc.scrapy.org/en/latest/topics/settings.html#depth-limit环境:
深度限制¶
默认值:0
任何网站允许抓取的最大深度。如果为零,
不会施加任何限制。
不,您不需要添加额外的 url 检查。如果你不指定allow_domains
on the Rule
level,它只会提取带有以下内容的 URL:abc.com
domain.
- 如果您不定义规则,它将不会提取任何 URL(将像
BaseSpider
).
希望有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)