如何用Beautiful Soup提取表格间隔元素并获取文本?解决AttributeError
解决网页表格提取第10个元素并导出CSV的问题
嘿,我来帮你搞定这个问题!你的代码里有两个关键问题导致了当前的错误,咱们一步步来修正:
问题分析
- 全局提取所有
<td>:你在遍历每个<tr>的时候,用了soup.findAll('td')——这会把页面上所有表格单元格都取出来,而不是当前行里的单元格,这就是为什么输出所有td标签的原因。 - 列表调用
.text属性:切片tds[2::10]得到的是一个td标签的列表,列表本身没有.text属性,你需要给列表里的每个单独td标签调用.text才能提取文本。
修正后的代码
prices = [] # 遍历表格的每一行<tr> for tr in soup.findAll('tr'): # 仅提取当前行内的所有<td>单元格 tds = tr.findAll('td') # 对当前行的td列表按规则切片,逐个提取文本(并去除前后空白) selected_texts = [td.text.strip() for td in tds[2::10]] # 只添加有内容的行,避免CSV里出现空行 if selected_texts: prices.append(selected_texts) # 将提取到的数据导出到CSV文件 import csv with open('prices_output.csv', 'w', newline='', encoding='utf-8') as csv_file: writer = csv.writer(csv_file) writer.writerows(prices)
关键改动说明
- 把
soup.findAll('td')替换为tr.findAll('td'):确保每次只处理当前行的单元格,而不是整个页面的所有单元格。 - 使用列表推导式处理切片结果:遍历切片后的每个td标签,调用
.text.strip()提取并清理文本,得到纯文本列表。 - 增加空内容判断:避免把没有符合条件单元格的空行写入CSV,让输出更整洁。
- 补充CSV导出代码:直接实现你需要的导出功能,无需额外编写逻辑。
内容的提问来源于stack exchange,提问作者Kevin Wright
相关产品推荐
相关产品推荐

