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

网页表格抓取求助:Levantine Ceramics网站16k行表格抓取失败

问题分析与解决方案

这个表格完全可以抓取,你遇到的问题核心是:表格数据是JavaScript动态加载的——用requests拿到的只是页面的初始静态HTML,此时<tbody>还未被填充数据,实际表格内容是页面加载完成后,通过AJAX请求从后端接口获取并渲染出来的。

方法一:直接抓取后端API接口(推荐,效率极高)

这是最快捷的方式,无需模拟浏览器,直接获取原始结构化数据:

  1. 打开目标页面,按F12调出浏览器开发者工具,切换到「Network」标签页,勾选「XHR」或「Fetch」选项。
  2. 刷新页面,观察加载的请求列表,找到返回大量JSON格式数据的接口(通常路径包含vessels或api字样)。
  3. 复制该接口的URL,用requests直接请求,再将JSON数据转换为DataFrame。

示例代码:

import requests
import pandas as pd

# 替换为你找到的实际API接口URL
api_url = "https://www.levantineceramics.org/api/vessels"
response = requests.get(api_url)
data = response.json()

# 根据接口返回的JSON结构调整,比如数据可能在'data'字段下
df = pd.DataFrame(data['data'])
print(df.head())

方法二:用Selenium模拟浏览器渲染(适合新手直观操作)

如果找不到API接口,可通过Selenium模拟浏览器加载完整页面后再抓取:

  1. 先安装Selenium库,以及对应浏览器的驱动(比如ChromeDriver,需和你的Chrome版本匹配)。
  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驱动(确保驱动路径正确,或已配置到系统环境变量)
driver = webdriver.Chrome()
driver.get("https://www.levantineceramics.org/vessels")

# 显式等待,直到tbody中出现数据行(最多等待30秒)
wait = WebDriverWait(driver, 30)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "tbody tr")))

# 解析页面中的表格
df = pd.read_html(driver.page_source)[0]
print(df.head())

# 关闭浏览器
driver.quit()

为什么之前的方法失效?

requests只能获取服务器返回的初始HTML,此时页面的JavaScript还未执行,表格数据尚未被填充到<tbody>标签中,所以你得到的是空的<tbody>;pandas.read_html直接解析初始HTML,自然也拿不到动态加载的表格内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:45:48