BeautifulSoup抓取的表格行拼接文本如何拆分字段归类输出
实现方案
完全不需要硬拆已经拼接好的纯文本,直接提取tr标签下的td子节点即可,这是最稳妥、出错率最低的方案。你现在调用tr.get_text()相当于把同一行所有td的内容直接无分隔拼接,当然会出现连在一起的字符串。
可直接运行的代码示例
from urllib.request import urlopen from bs4 import BeautifulSoup import pandas as pd url = 'https://www.peakbagger.com/list.aspx?lid=5651' html = urlopen(url) soup = BeautifulSoup(html, 'html.parser') # 存储所有山峰数据的列表 peak_list = [] # 跳过表头行,从第二行开始取前100条有效记录 rows = soup.find_all('tr')[1:101] for row in rows: tds = row.find_all('td') # 按td顺序提取对应字段,可根据自己的需求增删字段 item = { "序号": tds[0].get_text(strip=True), "山峰名称": tds[1].get_text(strip=True), "所属区域": tds[2].get_text(strip=True), "海拔(米)": tds[3].get_text(strip=True), "所属行政区域": tds[4].get_text(strip=True), "所属岛屿": tds[5].get_text(strip=True) } peak_list.append(item) # 按类别输出示例:打印所有山峰名称 print("===== 山峰名称列表 =====") for peak in peak_list: print(peak["山峰名称"]) # 也可以直接导出为csv文件方便后续处理 df = pd.DataFrame(peak_list) df.to_csv("日本百名山数据.csv", index=False, encoding="utf-8-sig")
不建议拆分纯文本的原因
- 拼接后的纯文本没有固定分隔符,部分山峰名、区域名的字符规则不统一,用
split或者正则拆分很容易出现匹配错误,稳定性极差 - 直接提取
td节点属于结构化提取,只要页面表格结构不变,提取结果100%准确
内容的提问来源于stack exchange,提问作者Annie
相关产品推荐
相关产品推荐

