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

使用BeautifulSoup爬取网页表格下载链接仅获表头,求解决方法

问题原因

目标页面的表格数据并非直接嵌入在初始HTML中,而是通过JavaScript动态加载的。urllib.request只能获取页面首次加载的静态源码,此时表格的<tbody>还未被填充数据,所以只能拿到表头行。

解决方案1:用Selenium模拟浏览器渲染(直观易实现)

Selenium可以模拟浏览器打开页面,等待JavaScript执行完成后再获取完整页面源码,这样就能拿到所有表格行。

步骤:

  1. 先安装Selenium和对应浏览器驱动(比如ChromeDriver,要和浏览器版本匹配)
  2. 编写代码模拟浏览器加载并解析页面
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time

testurl = 'https://www.ercot.com/mp/data-products/data-product-details?id=NP3-562-CD'

# 配置Chrome无头模式(可选,不弹出浏览器窗口)
chrome_options = Options()
chrome_options.add_argument('--headless=new')
chrome_options.add_argument('--disable-gpu')

# 初始化浏览器驱动
driver = webdriver.Chrome(options=chrome_options)
driver.get(testurl)

# 等待页面加载完成(根据网络情况调整等待时间)
time.sleep(3)

# 获取完整页面源码并解析
page_content = BeautifulSoup(driver.page_source, "html.parser")
driver.quit()

# 遍历表格行提取下载链接
table_dt = page_content.find("table")
for tr in table_dt.find_all("tr"):
    links = tr.find_all("a", href=True)
    if links:
        for link in links:
            print(f"下载链接: {link['href']}")

解决方案2:直接调用后端API接口(更高效)

打开浏览器开发者工具(F12),切换到Network标签页刷新页面,能找到加载表格数据的API接口。直接请求这个接口可以拿到结构化数据,无需渲染页面。

比如这个页面的表格数据来自接口https://www.ercot.com/api/1/services/read/dashboards/np3-562-cd/data,返回JSON格式数据,包含所有文件的下载链接。

import requests

api_url = 'https://www.ercot.com/api/1/services/read/dashboards/np3-562-cd/data'
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()

# 遍历数据提取下载链接
for item in data['rows']:
    download_link = item.get('url')
    if download_link:
        print(f"下载链接: {download_link}")

注意:API接口可能会随网站更新变化,需要自己通过开发者工具确认最新地址;请求时带上合适的User-Agent,避免被反爬拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:11:05