如何从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
相关产品推荐
相关产品推荐

