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

如何从指定URL读取特定表格?Python读取GDP数据遇无表错误

解决方法

你的问题出在pd.read_html只能识别标准HTML <table>标签,而目标网站的GDP数据并非直接以<table>形式嵌入页面,而是存储在页面的JSON脚本中,前端通过JavaScript渲染出表格,所以pandas无法识别。以下是两种可行的解决方法:

方法一:提取页面中的JSON数据(推荐)

网站的核心数据会放在id="__NEXT_DATA__"的script标签里,直接解析这个JSON就能拿到结构化数据,比解析HTML更稳定:

  1. 先安装依赖库(如果没装的话):
pip install beautifulsoup4 pandas requests
  1. 代码实现:
import requests
import json
from bs4 import BeautifulSoup
import pandas as pd

url = "https://worldpopulationreview.com/countries/by-gdp"

# 获取页面内容
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 定位存储数据的script标签
script_data = soup.find("script", id="__NEXT_DATA__").string
# 解析JSON
raw_data = json.loads(script_data)
# 提取GDP相关数据(路径根据页面JSON结构确定)
gdp_list = raw_data["props"]["pageProps"]["data"]

# 转换为DataFrame并筛选需要的字段
df = pd.DataFrame(gdp_list)
# 保留国家名称、GDP总量、人均GDP字段
filtered_df = df[["country", "gdp", "gdpPerCapita"]]
print(filtered_df.head())

方法二:模拟浏览器渲染(适用于完全动态加载的页面)

如果后续网站改为完全动态加载(即r.text里也看不到数据),可以用selenium模拟浏览器加载页面,再提取表格:

  1. 安装依赖:
pip install selenium pandas

(需要额外下载对应浏览器的驱动,比如ChromeDriver,配置好环境变量)

  1. 代码示例:
from selenium import webdriver
import pandas as pd

url = "https://worldpopulationreview.com/countries/by-gdp"

# 初始化浏览器(这里以Chrome为例)
driver = webdriver.Chrome()
driver.get(url)

# 直接读取页面中的表格
df_list = pd.read_html(driver.page_source)
driver.quit()

# 输出第一个表格(也就是GDP数据表格)
print(df_list[0].head())

注意事项

  • 网站的JSON结构可能会随版本更新变化,如果方法一失效,需要重新查看页面源码,调整JSON数据的提取路径。
  • 频繁请求网站可能会触发反爬机制,建议添加请求间隔(比如time.sleep(2))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:20:19