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

滚动加载页面Web Scraping问题:如何一次性获取全部896条数据?

解决滚动加载页面的全量爬取问题

这个论坛的滚动加载是通过AJAX异步请求实现的,直接爬取静态页面只能拿到初始20条。要获取全部896条,得找到后台提供数据的API接口,循环请求所有分页数据。

步骤1:定位数据接口

打开浏览器按F12进入开发者工具,切换到「Network」标签页,滚动页面加载新内容,观察XHR/fetch请求。你会发现每次滚动都会发送一个带分页参数的请求,格式类似:
https://www.sarbanes-oxley-forum.com/api/category/20/general-sarbanes-oxley-discussion/topics?page=2&limit=20
其中page是页码,limit是每页条数,初始页为page=1。

步骤2:编写批量爬取代码

用requests循环请求所有页码,解析返回的JSON数据提取标题和链接。注意带上浏览器请求头,避免被拦截:

import requests

main_titles = []
main_links = []
base_url = "https://www.sarbanes-oxley-forum.com/api/category/20/general-sarbanes-oxley-discussion/topics"
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",
    "Accept": "application/json, text/plain, */*"
}

total_items = 896
per_page = 20
total_pages = (total_items + per_page - 1) // per_page  # 计算总页数:896/20≈45页

for page in range(1, total_pages + 1):
    params = {"page": page, "limit": per_page}
    response = requests.get(base_url, headers=headers, params=params)
    if response.status_code != 200:
        print(f"请求第{page}页失败,状态码:{response.status_code}")
        continue
    
    data = response.json()
    # 按实际返回的JSON结构提取数据,以下为示例
    for topic in data.get("topics", []):
        main_titles.append(topic["title"])
        main_links.append(f"https://www.sarbanes-oxley-forum.com/topic/{topic['id']}/{topic['slug']}")
    
    print(f"已获取第{page}页,累计{len(main_links)}条数据")

print(f"最终获取{len(main_links)}条数据")

注意事项

  • 实际接口的参数和返回字段可能需要你通过抓包确认,比如部分接口用offset代替page,或字段命名不同
  • 可加入time.sleep(1)延迟请求,避免因频率过高被网站拦截
  • 如果论坛需登录才能查看全量内容,需先模拟登录获取有效Cookie并加入请求头

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:25:57