使用Scrapy爬取url开头的一段列表url
Using Scrapy to crawl a list of urls in a section of the start url
我正在尝试使用具有以下功能的 Scrapy 实现一个 CrawlSpider。
基本上,我的开始 url 包含各种 url 的列表,这些列表被分成几个部分。我只想从特定部分抓取 url,然后抓取它们。
为此,我使用 restrict_xpaths 定义了我的 link 提取器,以便将我要抓取的 link 与其他提取器隔离开来。
但是,由于 restrict_xpaths,当蜘蛛试图抓取一个不是开始 url 的 link 时,它会停止,因为它没有找到任何 link。
所以我尝试添加另一条规则,该规则应该通过使用应用于 start_url 的 deny_domains 来确保开始 url 之外的 links 被抓取。但是,此解决方案不起作用。
谁能提出一个可能的策略?
现在我的规则是:
rules = {Rule(LinkExtractor(restrict_xpaths=(".//*[@id='mw-content- text']/ul[19]"), ), callback='parse_items', follow=True),
Rule(LinkExtractor(deny_domains='...start url...'), callback='parse_items',follow= True),}
您正在通过围绕规则对使用 {} 来定义一个集合。尝试用 ():
把它变成一个元组
rules = (Rule(LinkExtractor(restrict_xpaths=(".//*[@id='mw-content- text']/ul[19]"), ), callback='parse_items', follow=True),
Rule(LinkExtractor(deny_domains='...start url...'), callback='parse_items',follow= True),)
除此之外,您可能希望将 'unique=True' 传递给规则,以确保不遵循返回 "start url" 的任何链接。参见 BaseSgmlLinkExtractor
此外,使用 'parse_items' 作为对两个 LinkExtractor 的回调有点奇怪。根据你的解释,我看不出第一个提取器需要回调....它只是提取应该添加到队列中以便 Scraper 去获取的链接,对吧?
您想要 use/persist 的数据的真正抓取通常发生在 'parse_items' 回调中(至少这是文档中使用的约定)。
我正在尝试使用具有以下功能的 Scrapy 实现一个 CrawlSpider。 基本上,我的开始 url 包含各种 url 的列表,这些列表被分成几个部分。我只想从特定部分抓取 url,然后抓取它们。 为此,我使用 restrict_xpaths 定义了我的 link 提取器,以便将我要抓取的 link 与其他提取器隔离开来。 但是,由于 restrict_xpaths,当蜘蛛试图抓取一个不是开始 url 的 link 时,它会停止,因为它没有找到任何 link。 所以我尝试添加另一条规则,该规则应该通过使用应用于 start_url 的 deny_domains 来确保开始 url 之外的 links 被抓取。但是,此解决方案不起作用。 谁能提出一个可能的策略? 现在我的规则是:
rules = {Rule(LinkExtractor(restrict_xpaths=(".//*[@id='mw-content- text']/ul[19]"), ), callback='parse_items', follow=True),
Rule(LinkExtractor(deny_domains='...start url...'), callback='parse_items',follow= True),}
您正在通过围绕规则对使用 {} 来定义一个集合。尝试用 ():
把它变成一个元组 rules = (Rule(LinkExtractor(restrict_xpaths=(".//*[@id='mw-content- text']/ul[19]"), ), callback='parse_items', follow=True),
Rule(LinkExtractor(deny_domains='...start url...'), callback='parse_items',follow= True),)
除此之外,您可能希望将 'unique=True' 传递给规则,以确保不遵循返回 "start url" 的任何链接。参见 BaseSgmlLinkExtractor
此外,使用 'parse_items' 作为对两个 LinkExtractor 的回调有点奇怪。根据你的解释,我看不出第一个提取器需要回调....它只是提取应该添加到队列中以便 Scraper 去获取的链接,对吧?
您想要 use/persist 的数据的真正抓取通常发生在 'parse_items' 回调中(至少这是文档中使用的约定)。