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

如何抓取网站中JavaScript渲染的表格至DataFrame?

问题原因

这个网站的表格是JavaScript动态渲染的,requests只能获取页面的初始HTML源码,此时表格还未生成,所以BeautifulSoup找不到目标表格元素。从你提供的Soup输出也能看到,页面只有空容器和JS脚本,没有实际表格内容。

可行方案

有两种高效的实现方式:

方案1:直接调用网站API(推荐,速度更快)

观察网站的网络请求可以发现,表格数据是通过API接口返回的JSON格式数据,无需渲染页面。直接请求该接口即可拿到数据并转为DataFrame:

import requests
import pandas as pd

headers = {'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36'}
response = requests.get('https://iborrowdesk.com/api/ticker', headers=headers, timeout=10)
response.raise_for_status()

# 将JSON数据转为DataFrame
df = pd.DataFrame(response.json())
print(df.head())

方案2:使用浏览器自动化工具(Selenium)

如果API接口有变化,或者需要模拟完整页面渲染流程,可以用Selenium驱动真实浏览器加载页面,等待表格渲染完成后再提取数据:

步骤1:安装依赖

先安装Selenium和对应浏览器驱动(比如ChromeDriver):

pip install selenium

ChromeDriver需要和你的Chrome版本匹配,下载后放在系统PATH中或指定路径。

步骤2:代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

# 初始化Chrome浏览器(无头模式,不显示窗口)
options = webdriver.ChromeOptions()
options.add_argument('--headless=new')
options.add_argument('user-agent=Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.28 Safari/537.36')

driver = webdriver.Chrome(options=options)
try:
    driver.get('https://iborrowdesk.com')
    # 等待表格加载完成,最多等待10秒
    table = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, 'table-condensed'))
    )
    # 将表格转为DataFrame
    df = pd.read_html(table.get_attribute('outerHTML'))[0]
    print(df.head())
finally:
    driver.quit()  # 关闭浏览器
注意事项
  • 使用API时,保持请求头一致性,避免被网站拦截;
  • 使用Selenium时,确保浏览器驱动与浏览器版本匹配,无头模式可减少资源占用;
  • 请勿频繁请求网站,遵守网站的使用条款。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:25:31