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

Python爬取Papers with Code表格时find_all/xpath返回空的解决方法

问题根本原因

requests拿到的只是服务器返回的初始静态HTML,Papers with Code的SOTA排行榜根本不在这个初始源码里——表格数据是页面加载后由前端JS异步拉取、动态插入到DOM结构中的。静态源码里连table标签都不存在,不管用BeautifulSoup的find_all还是lxml的xpath匹配,返回空列表是必然结果。
你之前复制的xpath是浏览器中JS渲染完成后的DOM路径,和requests拿到的原始源码结构完全不匹配,自然搜不到对应节点。

可行解决方案

按需选择以下两种方案即可:

  • 直接调用站点后端数据接口
    排行榜数据是前端通过接口拉取的结构化JSON,不需要解析HTML,效率更高、稳定性更好。打开浏览器开发者工具的网络面板,筛选XHR/Fetch请求,就能找到加载排行榜数据的对应接口,带上正常请求头直接请求接口,就能拿到包含排名、方法名称、精度指标、论文关联信息的全量结构化数据,不需要额外做HTML节点解析。
    参考实现代码:
    import requests
    
    # 对应3D目标检测KITTI车辆中等难度任务的接口配置
    base_api = "https://paperswithcode.com/api/v1/tasks/3d-object-detection/evaluations/"
    req_params = {
        "dataset": "kitti-cars-moderate",
        "order_by": "-metric"
    }
    req_headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
    }
    resp = requests.get(base_api, params=req_params, headers=req_headers)
    rank_data = resp.json()
    # 直接从返回的JSON结构中提取需要的字段即可
    
  • 使用支持JS渲染的爬虫工具获取完整页面
    如果不想分析接口,可以用能模拟浏览器运行、自动执行页面JS的工具,等页面把排行榜完全渲染完成后,再提取页面HTML做解析。常用工具包括Playwright、Selenium,其中Playwright配置更简单、被反爬拦截的概率更低。
    参考实现代码:
    from playwright.sync_api import sync_playwright
    from bs4 import BeautifulSoup
    
    with sync_playwright() as pw:
        # 启动无头浏览器
        browser = pw.chromium.launch(headless=True)
        page = browser.new_page()
        # 打开目标SOTA页面
        page.goto("https://paperswithcode.com/sota/3d-object-detection-on-kitti-cars-moderate")
        # 等待排行榜表格节点加载完成
        page.wait_for_selector("table")
        # 拿到渲染完成的完整HTML
        full_html = page.content()
        browser.close()
    
    soup = BeautifulSoup(full_html, "html.parser")
    # 此时可以正常匹配到表格元素
    all_tables = soup.find_all("table")
    

爬取过程中请控制请求频率,遵守目标站点的访问规则,避免对站点正常服务造成影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:09:25