首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BeautifulSoup在标记边界上断开单词

问使用BeautifulSoup在标记边界上断开单词
EN

Stack Overflow用户
提问于 2018-08-10 22:58:09
回答 2查看 252关注 0票数 0

我正在尝试用BeautifulSoup将html解析为文本,但我遇到了一个问题:一些单词被没有空格的标签分割:

代码语言:javascript
复制
<span>word1</span><span>word2</space>

所以当我提取文本时,我得到:

代码语言:javascript
复制
word1word2

一些句子也会连接到一个句子中:

代码语言:javascript
复制
INTODUCTION There are many...

有没有一种简单的方法可以用BeautifulSoup在标签上强制进行单词分隔?也可能是我可以修复一些标签上的句子分隔?

我有几个复杂的html文件。我将它们处理成如下文本:

代码语言:javascript
复制
plain_texts = [BeautifulSoup(html, "html.parser").get_text() for html in htmls]
EN

回答 2

Stack Overflow用户

发布于 2018-08-10 23:13:53

您可以使用find_all()

代码语言:javascript
复制
from bs4 import BeautifulSoup

html_doc = """
<!DOCTYPE html><html lang="en"><head><title>words</title></head><body><span>word1</span><span>word2</span></body></html>
"""

soup = BeautifulSoup(html_doc, 'lxml')
for span in soup.find_all('span'):
    print(span.text)

它分别打印<span>标记之间的文本:

代码语言:javascript
复制
word1
word2
票数 0
EN

Stack Overflow用户

发布于 2018-08-11 00:04:36

您可以使用replace_with()方法(docs here)来修补您的汤。但是很多取决于你的HTML的结构:

代码语言:javascript
复制
from bs4 import BeautifulSoup

data = '''
<html><body><span>word1</span><span>word2</space>
'''

soup = BeautifulSoup(data, 'lxml')
for span in soup.select('span'):
    span.replace_with(span.text + ' ')

print(soup.text.strip())

这将打印:

代码语言:javascript
复制
word1 word2
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51789216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档