代码之家  ›  专栏  ›  技术社区  ›  Роман Коптев

用beautifulsoup打破标签边界上的单词

  •  0
  • Роман Коптев  · 技术社区  · 6 年前

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

    <span>word1</span><span>word2</space>
    

    因此,当我提取文本时,我有:

    word1word2
    

    有些句子还连成一个句子:

    INTODUCTION There are many...
    

    有没有一种简单的方法来强制使用beautifulsoup对标签进行分词?也可能是我可以在一些标签上固定句子间隔?

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

    plain_texts = [BeautifulSoup(html, "html.parser").get_text() for html in htmls]
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   RoadRunner    6 年前

    你可以用 find_all() :

    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> 分别标记:

    word1
    word2
    
        2
  •  0
  •   Andrej Kesely    6 年前

    你可以用 replace_with() 方法( docs here )但这取决于HTML的结构:

    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())
    

    这张照片:

    word1 word2