使用Beautiful Soup抓取格式不规范标签中文本的问题求助
解决BeautifulSoup提取
间及加粗标签文本的问题
间及加粗标签文本的问题
嘿,我看你现在的问题是只拿到了<br>标签对象,没提取到想要的文本内容对吧?这是因为findAll("br")返回的是页面里所有<br>标签的列表,不是它们之间的文本内容。咱们换个思路来处理:
方法1:利用get_text()快速提取并分割
BeautifulSoup的get_text()方法可以指定分隔符,直接把<br>这类分隔元素替换成换行,同时自动提取所有子标签(比如<b>)里的文本:
# 先拿到目标div judge_record = judge_soup.find("div", {"class": "field__item even"}) # 用换行作为分隔符提取所有文本,同时去除首尾空白 full_text = judge_record.get_text(separator='\n', strip=True) # 拆分并过滤空行,得到所有有效文本行 text_lines = [line for line in full_text.split('\n') if line]
这样text_lines里就会包含所有<br>之间的内容,以及加粗标签里的文本了。
方法2:遍历子节点精准收集
如果你需要更精细的控制,可以直接遍历目标div的子节点,跳过<br>标签,收集所有非空文本:
judge_record = judge_soup.find("div", {"class": "field__item even"}) text_content = [] for child in judge_record.children: # 跳过<br>标签 if child.name == 'br': continue # 提取当前节点的文本(包括<b>这类子标签的文本),并去除空白 current_text = child.get_text(strip=True) # 只添加非空的文本内容 if current_text: text_content.append(current_text)
这种方法能更灵活地处理节点,比如遇到特殊标签时可以单独处理。
这两种方法都能帮你拿到想要的文本内容,你可以根据实际页面结构选更合适的一种~
内容的提问来源于stack exchange,提问作者muZero




