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

如何从Moneycontrol网站抓取HTML表格?代码报错及年份切换求助

问题修复:获取股息表格数据及年份切换

1. 解决列表索引错误

你的代码报错是因为表格的**表头行(第一个<tr>)**没有dvd_brdb类的<td>标签,直接通过索引[0]-[3]访问会抛出索引越界异常。需要跳过表头行,同时增加单元格数量校验避免异常。

修改后的代码:

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = "https://www.moneycontrol.com/stocks/marketinfo/dividends_declared/"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')

dividendsTable = soup.find('table', class_='b_12 dvdtbl')
data = []

rows = dividendsTable.find_all('tr') 
# 跳过表头行,遍历数据行
for row in rows[1:]:
    tds = row.find_all('td', class_="dvd_brdb")
    # 确保当前行有足够的单元格
    if len(tds) >= 4:
        st_company = tds[0].text.strip()
        st_type = tds[1].text.strip()
        st_percent = tds[2].text.strip()
        st_announcement = tds[3].text.strip()
        data.append([st_company, st_type, st_percent, st_announcement])
        print(st_company, st_type, st_percent, st_announcement)

# 可选:转换为DataFrame方便后续处理
df = pd.DataFrame(data, columns=["公司", "股息类型", "股息比例", "公告日期"])
print(df)

2. 切换到2018年获取数据

该网站的年份筛选可直接通过URL参数实现,构造2018年的目标URL即可:

# 2018年数据的目标URL
url_2018 = "https://www.moneycontrol.com/stocks/marketinfo/dividends_declared/index.php?year=2018"
r = requests.get(url_2018, headers=headers)
# 后续解析逻辑和上述代码一致

额外提示

  • 网站存在反爬机制,建议始终携带User-Agent请求头,避免被限制访问;
  • 如果需要获取分页加载的更多数据,可检查页面的分页参数,构造对应URL批量请求;若数据为动态渲染,可改用selenium模拟浏览器行为。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:10:50