Scrapy LinkExtractor - 要遵循哪个 RegEx?

Posted

技术标签:

【中文标题】Scrapy LinkExtractor - 要遵循哪个 RegEx?【英文标题】:Scrapy LinkExtractor - which RegEx to follow? 【发布时间】:2015-09-15 00:16:48 【问题描述】:

我正在尝试从亚马逊抓取一个类别,但我在 Scrapy 中获得的链接与浏览器中的链接不同。现在我正在尝试跟踪下一页的踪迹,并在 Scrapy 中(将 response.body 打印到 txt 文件中)我看到了这些链接:

<span class="pagnMore">...</span>
<span class="pagnLink"><a href="/s?ie=UTF8&page=4&rh=n%3A2619533011%2Ck%3Apet%20supplies%2Cp_72%3A2661618011%2Cp_n_date_first_available_absolute%3A2661609011" >4</a></span>
<span class="pagnCur">5</span>
<span class="pagnLink"><a href="/s?ie=UTF8&page=6&rh=n%3A2619533011%2Ck%3Apet%20supplies%2Cp_72%3A2661618011%2Cp_n_date_first_available_absolute%3A2661609011" >6</a></span>
<span class="pagnMore">...</span>
<span class="pagnDisabled">20</span>
<span class="pagnRA"> <a title="Next Page"
                   id="pagnNextLink"
                   class="pagnNext"
                   href="/s?ie=UTF8&page=6&rh=n%3A2619533011%2Ck%3Apet%20supplies%2Cp_72%3A2661618011%2Cp_n_date_first_available_absolute%3A2661609011">
<span id="pagnNextString">Next Page</span>

我想关注 pagnNextString 链接,但我的蜘蛛甚至没有开始爬行:

Rule(SgmlLinkExtractor(allow=("n\%3A2619533011\%", ),restrict_xpaths=('//*[@id="pagnNextLink"]',)) , callback="parse_items", follow= True),

如果我摆脱规则或做某事。就像'^http.*' 它正在工作,但它遵循一切。 我在这里做错了什么?

【问题讨论】:

【参考方案1】:

尝试仅检查page 参数:

Rule(SgmlLinkExtractor(allow=r"page=\d+"), callback="parse_items", follow= True),

【讨论】:

Rule(SgmlLinkExtractor(allow=r"page=\d+"), callback="parse_items", follow= True), 工作并抓取所有内容。 Rule(SgmlLinkExtractor(allow=r"page=\d+", restrict_xpaths='//*[@id="pagnNextLink"]'), callback="parse_item", follow= True), 有效,但爬取了 0 页,scrapy 立即停止。我想以某种方式限制抓取。 @Chris 我会找到分页容器/块并将其用于限制。

以上是关于Scrapy LinkExtractor - 要遵循哪个 RegEx?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Scrapy 中创建基于 href 的 LinkExtractor 规则

Scrapy LinkExtractor - 要遵循哪个 RegEx?

Scrapy LinkExtractor特定网址

python爬虫scrapy的LinkExtractor

scrapy的使用-LinkExtractor

python爬虫scrapy之rules的基本使用