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

Scrapy分页问题求助:处理JS触发的下一页按钮

解决Scrapy处理JavaScript驱动的分页按钮问题

你遇到的核心问题是这个分页按钮不依赖传统的href属性跳转,而是靠JavaScript逻辑+自定义data属性来触发下一页加载。咱们一步步拆解解决:

问题根源

先看你给出的HTML代码:

<a href="" onclick="return false;" class="archive_page_info" id="next_achive_button" data-number_page_click="2">NEXT</a>
  • href是空值,且onclick="return false;"直接阻止了默认跳转行为
  • 真正的分页标识藏在data-number_page_click属性里,这里的2就是下一页的页码

而你原来的代码里,response.css("#next_achive_button").extract_first()提取的是整个a标签的HTML内容,不是有效URL;同时next_page_url = response这一步完全错误——response是Scrapy的响应对象,根本不是请求地址。

解决方案

我们需要提取data-number_page_click的页码值,再根据网站的分页URL规则构造合法的请求地址。

步骤1:提取分页页码参数

先从按钮的data属性里拿到下一页的页码:

page_num = response.css("#next_achive_button::attr(data-number_page_click)").get()

步骤2:构造下一页请求URL

你需要先观察目标网站的分页URL格式(比如是https://xxx.com/archive?page=2这种参数式,还是https://xxx.com/archive/page/2这种路径式),然后拼接出完整URL:

# 替换成目标网站的基础分页地址,示例为参数式格式
base_page_url = "https://your-target-site.com/archive?page="
next_page_url = base_page_url + page_num if page_num else None

步骤3:修正分页请求逻辑

完整的修正后代码片段:

# 处理分页链接
page_num = response.css("#next_achive_button::attr(data-number_page_click)").get()
if page_num:
    # 根据网站实际分页规则调整URL构造方式
    next_page_url = f"https://your-target-site.com/archive?page={page_num}"
    yield scrapy.Request(url=next_page_url, callback=self.parse)

额外提示

  • 如果点击按钮后是通过AJAX动态加载内容,建议打开浏览器开发者工具的Network面板,找到XHR类型的请求,直接请求对应的API接口会更高效
  • 若网站页码是连续递增的,你也可以在爬虫里维护一个页码变量自增构造URL,但优先使用页面上的data属性值,能避免页码不一致的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:32:59