提取音乐商店通讯数据脚本输出空白,求修正方案
问题修正方案
你的CSV输出空白的核心问题是元素定位逻辑错误,以下是具体修正步骤:
错误分析
- 你明确说明专辑标题和乐队名在
h3和h4元素中,但代码错误地去查找td元素的td_class属性(HTML标准中不存在td_class这个属性)。 - 未做空值判断就直接调用
.text,一旦找不到目标元素会引发异常,导致脚本中断或数据丢失。
修正后的代码
from bs4 import BeautifulSoup import requests import pandas as pd url = "https://www.musicmaniarecords.be/_sys/newsl_view?n=260&sub=Tmpw6Rij5D" response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') # 定位包含专辑信息的行容器(页面实际结构为tr标签带row类) album_rows = soup.find_all('tr', class_='row') album_title = [] band_name = [] for row in album_rows: # 直接通过h3、h4标签提取目标内容 title_elem = row.find('h3') band_elem = row.find('h4') # 空值判断,避免找不到元素时触发报错 if title_elem and band_elem: album_title.append(title_elem.get_text(strip=True)) band_name.append(band_elem.get_text(strip=True)) # 生成CSV并去除冗余索引列 df = pd.DataFrame({'album_title': album_title, 'band_name': band_name}) df.to_csv('music_records.csv', index=False)
关键修正点
- 元素定位修正:页面中实际承载专辑信息的是
tr.row元素,而非a.row;直接通过h3、h4标签定位目标文本,摒弃错误的td_class属性逻辑。 - 空值安全处理:添加
if title_elem and band_elem判断,确保仅在找到有效元素时才提取文本,避免AttributeError。 - CSV输出优化:添加
index=False参数,避免生成多余的索引列。
内容的提问来源于stack exchange,提问作者xieem
相关产品推荐
相关产品推荐

