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

使用BeautifulSoup抓取选举数据时无法获取候选人姓名的问题

解决方法:处理嵌套标签的文本提取问题

问题出在BeautifulSoup的.string属性特性上:只有当标签没有子标签,或者仅包含一个纯文本节点时,.string才会返回有效内容。你的候选人姓名放在td下的span子标签里,这时候用.string自然会返回None。

给你几个实用的解决办法:

方法1:直接提取标签下所有文本(最省心)

用.get_text()方法替代.string,它会自动抓取标签及其所有子标签里的文本内容,还可以用strip=True去掉多余的空格和换行:

# 提取单个候选人姓名
first_candidate_name = first_data_row.find_all('td')[0]
print(first_candidate_name.get_text(strip=True))

# 处理整行数据的列表推导式
[row_data.get_text(strip=True) for row_data in first_data_row.find_all('td')]

这样应该能拿到你要的候选人姓名,而不是None。

方法2:精准定位子标签提取

如果你确定候选人姓名一定在span标签里,可以直接定位这个子标签再取内容:

# 提取单个候选人姓名
first_candidate_span = first_data_row.find_all('td')[0].find('span')
print(first_candidate_span.string)  # 或者 first_candidate_span.get_text(strip=True)

# 整行处理的话,可以针对性处理前两个td
tds = first_data_row.find_all('td')
processed_row = [
    tds[0].find('span').get_text(strip=True),
    tds[1].find('span').get_text(strip=True),
    tds[2].get_text(strip=True),
    tds[3].get_text(strip=True)
]

补充验证小技巧

如果不确定标签结构,先打印出标签的完整内容看看:

print(first_candidate_name.prettify())

这样能清楚看到td里的嵌套结构,方便调整提取逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 10:18:18