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

Scrapy分页爬取异常求助:无法适配非标准分页结构

解决Scrapy针对非标准分页的爬取问题

别担心,这种没有明确next按钮的分页我也踩过坑,咱们一步步来搞定它。

首先得摸清楚这个网站的分页逻辑:既然当前页码是用带current类的span标记的,那我们可以先定位到这个当前页元素,然后找到它的下一个兄弟li——那里面大概率就是下一页的链接。如果下一个兄弟不存在,说明已经爬完最后一页了。

具体实现步骤

  • 定位当前页元素
    在你的Spider里,用CSS选择器或者XPath定位当前页码的元素都可以:

    # CSS选择器写法
    current_page = response.css('span.page-numbers.current')
    # XPath写法
    current_page = response.xpath('//span[contains(@class, "page-numbers current")]')
    
  • 获取并跳转下一页
    先回到当前页元素的父节点li,再选取它的下一个兄弟li,最后提取里面的链接:

    next_li = current_page.xpath('../following-sibling::li[1]')
    if next_li:
        next_page_url = next_li.css('a.page-numbers::attr(href)').get()
        if next_page_url:
            # 用response.follow自动处理相对路径,不用手动拼接
            yield response.follow(next_page_url, self.parse)
    

要注意的边界情况

  • 如果到了最后一页,当前页的下一个兄弟li可能不存在,或者是「上一页」按钮,所以一定要加if next_li的判断,避免报错
  • 要是网站分页是动态加载的,那可能得换思路,但从你给出的静态结构来看,上面的方法完全适用

给你一个完整的Spider代码片段参考:

import scrapy

class YourSpider(scrapy.Spider):
    name = 'your_spider'
    start_urls = ['https://target-website.com']

    def parse(self, response):
        # 先处理当前页的数据提取逻辑
        for item in response.css('your-target-item-selector'):
            yield {
                'title': item.css('.title::text').get().strip(),
                # 这里添加你需要提取的其他字段
            }

        # 处理分页逻辑
        current_page = response.css('span.page-numbers.current')
        next_li = current_page.xpath('../following-sibling::li[1]')
        if next_li:
            next_page_url = next_li.css('a.page-numbers::attr(href)').get()
            if next_page_url:
                yield response.follow(next_page_url, self.parse)

你可以先跑一下这个代码,看看是不是能正确遍历所有分页~

内容的提问来源于stack exchange,提问作者Tony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:32:07