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

翻页URL不变的网页爬取问题:已实现首页爬取,求教多页数据获取

Hey there! 这种URL不变的翻页场景太常见啦,大多是因为页面用了AJAX异步加载或者前端框架渲染(比如React、Vue),数据不是通过刷新页面来获取的。我给你几个实用的方案,你可以根据自己的情况选:

方案1:直接调用AJAX数据接口(效率最高)

这种是最优解,因为不用加载整个页面,直接拿原始数据:

  • 打开浏览器开发者工具(按F12),切换到「Network」标签,筛选「XHR/Fetch」分类
  • 点击页面的「下一页」按钮,观察新出现的请求,找到返回JSON格式数据的那个接口(一般会包含page、offset这类参数)
  • 研究这个请求的参数规则(比如每页多少条、页码怎么递增),还有请求头里的必要信息(比如User-Agent、Cookie,部分网站需要登录态)
  • 用代码循环发送请求,修改页码参数来获取所有页的数据

举个Python示例(用requests库):

import requests
import time

# 替换成你抓包得到的请求头和接口地址
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
    "Cookie": "你的登录Cookie(如果需要)"
}
base_api_url = "https://example.com/api/list-data"

page_num = 1
while True:
    # 替换成接口实际需要的参数
    params = {
        "page": page_num,
        "limit": 20,
        "category": "xxx"
    }
    response = requests.get(base_api_url, headers=headers, params=params)
    data = response.json()
    
    # 这里调用你已经写好的「处理单页数据」的函数
    process_single_page_data(data)
    
    # 判断是否还有下一页:可以看返回的数据长度、或者接口里的has_next字段
    if len(data["data"]) == 0 or not data.get("has_next", False):
        break
    
    # 加个小延迟,避免触发反爬
    time.sleep(1)
    page_num += 1
方案2:用浏览器自动化工具模拟点击(适合复杂反爬场景)

如果AJAX接口加密、参数难分析,就直接模拟用户操作:

  • 推荐用Playwright(比Selenium更现代、稳定),或者Selenium
  • 代码里打开浏览器,加载页面,爬取首页数据后,找到「下一页」按钮点击,等待页面加载完成后再爬取,循环直到按钮不可点击

举个Playwright的Python示例:

from playwright.sync_api import sync_playwright
import time

with sync_playwright() as p:
    # 启动浏览器,headless=False可以看到操作过程,上线后改成True
    browser = p.chromium.launch(headless=False)
    page = browser.new_page()
    page.goto("你的目标网页URL")
    
    while True:
        # 调用你已有的「爬取单页数据」逻辑,这里需要用Playwright的元素定位
        items = page.query_selector_all(".item-container")
        for item in items:
            title = item.query_selector(".item-title").text_content().strip()
            price = item.query_selector(".item-price").text_content().strip()
            print(f"标题:{title},价格:{price}")
        
        # 定位下一页按钮,判断是否可点击
        next_btn = page.query_selector(".next-page-btn")
        if not next_btn or not next_btn.is_enabled():
            print("已爬完所有页面")
            break
        
        # 点击下一页,等待页面加载完成
        next_btn.click()
        page.wait_for_load_state("networkidle")  # 等待网络空闲,确保数据加载完毕
        time.sleep(0.5)
    
    browser.close()
一些额外注意事项
  • 别爬太快!加time.sleep()控制请求间隔,避免被网站封禁IP
  • 注意网站的robots.txt规则,不要爬取禁止抓取的内容
  • 如果需要登录才能翻页,记得在请求头里带上登录后的Cookie,或者用自动化工具模拟登录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:06:13