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

无class属性时如何抓取指定网页的表格数据?

网页表格数据抓取解决方案

先排查页面加载方式

这个页面的表格大概率是动态加载的——也就是页面初始HTML里没有表格内容,需要通过AJAX请求拉取数据后渲染。直接用BeautifulSoup爬静态HTML自然拿不到内容。你可以打开浏览器F12,切换到Network标签,刷新页面后筛选XHR/Fetch请求,找到返回表格数据的接口。

两种可行的爬虫实现方案

方案一:直接调用数据接口(高效首选)

找到数据接口后,直接请求接口获取JSON数据,无需解析HTML:

import requests
import pandas as pd

# 替换为你在开发者工具中找到的实际接口URL
api_url = "https://www.cbe.org.eg/en/Auctions/Pages/GetBillsHistoricalData.aspx"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

response = requests.get(api_url, headers=headers)
data = response.json()

# 转成DataFrame方便后续处理
df = pd.DataFrame(data)
print(df.head())

方案二:用Selenium模拟浏览器(兼容所有动态场景)

如果找不到接口,用Selenium模拟浏览器完整加载页面后再提取表格:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import pandas as pd

# 初始化Chrome浏览器
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
driver.get("https://www.cbe.org.eg/en/Auctions/Pages/AuctionsEGPTBillsHistorical.aspx")

# 等待表格加载(可根据实际加载速度调整等待时间)
driver.implicitly_wait(10)

# 定位表格:即使没有class,也可以通过标签直接定位,或结合父元素筛选
table = driver.find_element(By.TAG_NAME, "table")

# 提取表格数据
rows = table.find_elements(By.TAG_NAME, "tr")
data = []
for row in rows:
    cols = row.find_elements(By.TAG_NAME, "td")
    row_content = [col.text.strip() for col in cols]
    if row_content:
        data.append(row_content)

# 转成DataFrame
df = pd.DataFrame(data)
print(df.head())

# 关闭浏览器
driver.quit()

静态页面场景下的表格定位(备用)

如果页面是静态渲染的,只是表格没有class,可以通过以下方式定位:

import requests
from bs4 import BeautifulSoup

url = "https://www.cbe.org.eg/en/Auctions/Pages/AuctionsEGPTBillsHistorical.aspx"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 方式1:遍历所有table标签,通过表头内容筛选目标表格
for table in soup.find_all("table"):
    table_headers = table.find_all("th")
    if table_headers and any("Auction Date" in th.text.strip() for th in table_headers):
        # 找到目标表格,提取数据
        rows = table.find_all("tr")
        for row in rows:
            cols = row.find_all("td")
            row_text = [col.text.strip() for col in cols]
            print(row_text)

# 方式2:通过父元素定位,比如表格嵌套在某个特定div下
parent_container = soup.find("div", attrs={"class": "some-container-class"})  # 替换为实际父元素属性
if parent_container:
    target_table = parent_container.find("table")
    # 后续提取数据逻辑同上

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:48:21