Scrapy 刮擦链接提取器规则

Scrapy 刮擦链接提取器规则,scrapy,Scrapy,我有一个蜘蛛设置使用链接提取器规则。爬行器爬行并刮取我所期望的项目,尽管它只会跟随“下一页”分页按钮进入第三页,然后爬行器在第三页完成,没有任何错误,但通过“下一页”分页总共有50页需要爬行。这是我的密码: 感觉上我可能缺少了一个设置或其他东西,因为代码的功能与前3次迭代的预期一样。我的设置文件不会覆盖默认的深度限制0。非常感谢您的帮助,谢谢 编辑1 看起来它可能与我的代码没有任何关系,好像我从一个不同的产品页面开始,在爬行器退出之前,我可以得到多达8个页面。不确定它是否是我正在爬行的站点,或者

我有一个蜘蛛设置使用链接提取器规则。爬行器爬行并刮取我所期望的项目,尽管它只会跟随“下一页”分页按钮进入第三页,然后爬行器在第三页完成,没有任何错误,但通过“下一页”分页总共有50页需要爬行。这是我的密码:

感觉上我可能缺少了一个设置或其他东西,因为代码的功能与前3次迭代的预期一样。我的设置文件不会覆盖默认的深度限制0。非常感谢您的帮助,谢谢

编辑1 看起来它可能与我的代码没有任何关系,好像我从一个不同的产品页面开始,在爬行器退出之前,我可以得到多达8个页面。不确定它是否是我正在爬行的站点,或者如何进行故障排除

编辑2 故障排除再过一段时间,我的“下一个”链接似乎从网页上消失了。当我从第一页开始时,分页元素就出现了,可以转到下一页。当我查看下一页的响应时,没有产品,也没有下一个链接元素,所以蜘蛛认为已经完成了。我已尝试启用cookie,以查看站点是否需要cookie才能分页。那没有任何影响。会不会是时间问题

编辑3 我已经调整了下载延迟和并发请求的值,看看这是否会产生影响。无论我是在1秒还是30分钟内提取数据页,都会得到相同的结果。我假设30分钟是足够慢的,因为我可以手动做得更快

编辑4
尝试在调试模式下启用cookie和cookie中间件,看看这是否会有所不同。Cookie会与请求一起获取和发送,但我在尝试浏览页面时会得到相同的行为。

要检查站点是否在短时间内拒绝了太多请求,您可以在spider中添加以下代码,例如,在规则声明之前,并使用该值。另见优秀的


谢谢你,弗兰克,我一直在处理下载延迟值和并发请求。即使设置为60秒,也需要将近30分钟的时间来提取一页数据,爬行器停止。我不知道自定义设置覆盖,这很好,总比一直在settings.py中搞乱要好。很抱歉,这没有帮助。可能您已经尝试将USER_AGENT设置为非默认值了?是的,我尝试了许多不同的USER_AGENT值,并且忽略或跟踪robots.txt文件。不知道站点,我只能尝试猜测发生了什么。您可以尝试使用常规爬行器而不是爬行爬行器,并创建显式请求。然后为下一个页面请求添加一个较低的优先级,以便这些请求不会在前一页面的任何项目之前提交。因此,您的爬行器的行为与普通用户一样,具有常规web浏览器,但速度更快。有关手动请求的示例,请参见另一个。
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import Rule, CrawlSpider


class MySpider(CrawlSpider):
    name = 'my_spider'
    start_urls = [some_base_url]

    rules = (
        Rule(LinkExtractor(allow='//div[@data-test="productGridContainer"]//a[contains(@data-test, "product-title")]'), callback='parse_item'),
        Rule(LinkExtractor(restrict_xpaths='//div[@data-test="productGridContainer"]//a[contains(@data-test, "next")]'), follow=True)
    )

    def parse_item(self, response):
        # inspect_response(response, self)

        ...items are being scraped

        return scraped_info
custom_settings = {
    'DOWNLOAD_DELAY': 0.4
}