求助:使用BeautifulSoup无法获取class=info的p标签下span数据
解决BeautifulSoup无法获取指定class下span标签数据的问题
Hey,我帮你看了下你的代码,发现几个小问题导致你没法拿到想要的数据,咱们一步步来解决:
代码里的问题点
- 关键字冲突错误:你写的
attrs={class:'info'}里,class是Python的保留关键字,不能直接作为字典的键使用,这会直接触发语法错误。 - 未提取文本内容:你的代码最后只是打印了span标签对象的列表,没有提取标签里的文本,更没处理成你想要的逗号分隔格式。
修正后的完整代码
from bs4 import BeautifulSoup html = """ <p class="info"> <span>Kranji Mile Day simulcast races, Kranji Racecourse, SIN</span> <span>Class 3 Handicap - 1200M TURF</span> <span>Saturday, 26 May 2018</span> <span>Race 1, 5:15 PM</span> </p> """ soup = BeautifulSoup(html, "html.parser") # 用class_参数避开Python关键字,或者也可以写attrs={'class':'info'} info_paragraph = soup.find('p', class_='info') # 提取所有span的文本,strip()移除前后多余的换行和空格 span_contents = [span.get_text(strip=True) for span in info_paragraph.find_all("span")] # 处理第二个span里的'-',替换成逗号分隔 span_contents[1] = span_contents[1].replace(' - ', ', ') # 把所有内容用逗号拼接起来 final_result = ', '.join(span_contents) # 可选:把"5:15 PM"改成"5:15PM"去掉空格 final_result = final_result.replace(' PM', 'PM') print(final_result)
输出结果
运行上面的代码后,会得到你期望的格式:
Kranji Mile Day simulcast races, Kranji Racecourse, SIN, Class 3 Handicap, 1200M TURF, Saturday, 26 May 2018, Race 1, 5:15PM
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

