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

Python爬取ArcGIS网页表格失败:无法定位表格元素求助

解决动态页面表格爬取问题

你的问题根源在于目标页面是动态渲染的:用requests获取的只是初始HTML框架,表格数据是通过JavaScript异步调用后端接口加载的,初始HTML里根本没有esri-feature-table__content元素,所以BeautifulSoup找不到任何内容。

下面提供两种可行的解决方案:

方案1:用Selenium模拟浏览器加载动态内容

Selenium会启动真实浏览器,等待页面完全渲染后再抓取内容,适合处理复杂动态页面。

步骤:

  1. 安装依赖:
pip install selenium pandas
  1. 下载对应浏览器的驱动(比如ChromeDriver,要和你的Chrome版本匹配),并配置到系统路径或代码指定路径。

代码示例:

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

# 初始化Chrome浏览器驱动(如果驱动不在系统路径,需指定executable_path参数)
driver = webdriver.Chrome()
driver.get("https://experience.arcgis.com/experience/76b68b923a094fb5a2d193ace5ccb975/")

# 等待表格容器加载完成(最多等待10秒)
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, "esri-feature-table__content")))

# 获取渲染后的页面源码
page_source = driver.page_source
soup = BeautifulSoup(page_source, "html.parser")

# 提取表格并转为DataFrame
table = soup.find(id="esri-feature-table__content").find("table")
df = pd.read_html(str(table))[0]

print(df)
# 关闭浏览器
driver.quit()

方案2:直接抓取后端API接口

动态页面的表格数据通常来自后端的API接口,直接请求接口获取数据效率更高,无需模拟浏览器。

步骤:

  1. 打开浏览器开发者工具(F12),切换到「Network」标签,刷新页面。
  2. 在XHR/Fetch请求列表中,查找返回表格数据的接口(通常是包含query、FeatureServer等关键词的请求,返回JSON格式数据)。
  3. 复制该接口的URL,直接用requests请求并解析数据。

代码示例(以找到的API接口为例):

import requests
import pandas as pd

# 替换为你找到的实际API接口URL
api_url = "https://services.arcgis.com/.../FeatureServer/0/query?where=1%3D1&outFields=*&returnGeometry=false&f=json"

# 发送请求获取JSON数据
response = requests.get(api_url)
data = response.json()

# 提取属性数据并转为DataFrame
df = pd.DataFrame([item["attributes"] for item in data["features"]])
print(df)

两种方案对比

  • Selenium:通用性强,无需分析接口,适合所有动态页面,但速度较慢,需要依赖浏览器和驱动。
  • API抓取:速度快、效率高,但需要手动分析接口,部分接口可能有签名或权限验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:10:19