You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scrapy.Request()无法爬取下页:同代码在quotes.toscrape.com仅爬8页无报错

解决Scrapy爬虫仅爬取8页的问题

嘿,我来帮你排查这个Scrapy爬虫只爬8页的问题!首先咱们先从你代码里的那个全局变量count = 8说起——这大概率是个坑!Scrapy是多线程异步爬取的,全局变量会被多个并发请求同时修改,很容易导致计数混乱,提前终止下一页的请求。

可能的问题原因

  • 全局变量的并发冲突:你定义的count是全局变量,在多请求并发时,多个parse函数会同时修改它的值,导致爬取到第8页就误触发了停止逻辑(如果你的代码里有相关判断的话)。
  • 下一页链接提取错误:虽然quotes.toscrape.com的页面结构很规整,但如果你的XPath写得不对,可能在第8页之后提取不到下一页链接,导致爬取中断。
  • settings配置限制:如果你的项目settings.py里设置了CLOSESPIDER_PAGECOUNT = 8,那爬虫会严格只爬8页就停止。

修正后的代码示例

咱们把全局变量改成爬虫的实例属性,同时确保下一页链接提取正确:

import scrapy

class QuotesSpiderSpider(scrapy.Spider):
    name = 'quotes_spider'
    allowed_domains = ['quotes.toscrape.com']
    start_urls = ['http://quotes.toscrape.com/']
    # 用实例属性存页数,避免全局变量的并发问题
    current_page = 0

    def parse(self, response):
        self.current_page += 1
        self.logger.info(f"正在爬取第 {self.current_page} 页")
        
        # 提取并处理quote内容
        quotes = response.xpath('//*[@class="quote"]')
        for quote in quotes:
            text = quote.xpath('.//*[@class="text"]/text()').get()
            author = quote.xpath('.//*[@class="author"]/text()').get()
            tags = quote.xpath('.//*[@class="tag"]/text()').getall()
            yield {
                'text': text,
                'author': author,
                'tags': tags
            }
        
        # 正确提取下一页链接
        next_page_href = response.xpath('//li[@class="next"]/a/@href').get()
        if next_page_href:
            # 用urljoin拼接绝对URL,避免相对路径问题
            next_page_url = response.urljoin(next_page_href)
            yield scrapy.Request(url=next_page_url, callback=self.parse)

额外检查点

  1. 打开你的settings.py,看看有没有设置CLOSESPIDER_PAGECOUNT、CLOSESPIDER_ITEMCOUNT这类限制爬取数量的配置,如果有,把它们注释掉或者调整到你需要的数值。
  2. 运行爬虫时可以打开日志(scrapy crawl quotes_spider --logfile=spider.log),查看日志里是否有下一页请求的记录,以及是否有提取不到链接的提示。

这样修改后,你的爬虫应该能正常爬完quotes.toscrape.com的全部10页内容啦!

内容的提问来源于stack exchange,提问作者Vivek Kumar Sinha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:43:57