如何将BeautifulSoup find_all获取的多个<b>标签内容合并为单个字符串?
嘿,我来帮你搞定这个问题!你已经通过find_all("b")拿到了目标标签列表,要把它们的文本合并成一个空格分隔的字符串,有两种简洁的方法:
方法1:遍历标签列表拼接文本
你可以遍历每个<b>标签提取文本,再用空格把它们连接起来:
# 基于你已有的company_string变量 company_name = ' '.join([b.get_text(strip=True) for b in company_string]) print(company_name) # 输出: Company Name Limited
b.get_text(strip=True):提取每个<b>标签内的纯文本,同时自动去除文本前后的空白字符(让结果更干净)' '.join(...):将所有提取到的文本片段用空格拼接成完整字符串
方法2:直接获取父元素的文本(更高效)
观察你的HTML结构,所有<b>标签都嵌套在<a>标签里,你可以直接获取这个<a>标签的文本,利用BeautifulSoup的get_text()参数指定分隔符:
# 直接从container定位到目标a标签并提取文本 company_name = container.find("span", class_="company").a.get_text(strip=True, separator=' ') print(company_name) # 输出: Company Name Limited
get_text(strip=True, separator=' '):该方法会提取元素下所有子节点的文本,separator=' '指定不同文本节点之间用空格分隔,strip=True去除整体文本首尾的空白
整合到你的爬取代码里
把方法应用到你的现有代码中,完整片段如下:
from urllib.request import urlopen as uReq from bs4 import BeautifulSoup as soup import ssl my_url = 'https://www._________.co.uk/' context = ssl._create_unverified_context() uClient = uReq(my_url, context=context) page_html = uClient.read() uClient.close() page_soup = soup(page_html, "html.parser") containers = page_soup.findAll("div",{"class":"row"}) # 遍历每个container处理数据 for container in containers: # 方法1实现 company_string = container.span.find_all("b") company_name = ' '.join([b.get_text(strip=True) for b in company_string]) print(f"方法1结果: {company_name}") # 方法2实现(更推荐,减少标签遍历) try: company_name_alt = container.find("span", class_="company").a.get_text(strip=True, separator=' ') print(f"方法2结果: {company_name_alt}") except AttributeError: # 处理找不到目标标签的情况,避免报错 print("未找到公司名称")
内容的提问来源于stack exchange,提问作者lawson
相关产品推荐
相关产品推荐

