使用Python从HTML文件中提取文本

我想使用Python从HTML文件中提取文本。 如果我从浏览器复制文本并将其粘贴到记事本中,我基本上需要获得相同的输出。

我想要一些比使用正则表达式更强大的东西,而这些正则表达式可能会导致HTML格式不正确。 我见过很多人推荐美丽的汤,但我使用它有一些问题。 首先,它收集了不需要的文本,例如JavaScript源代码。 另外,它没有解释HTML实体。 例如,我会期待' 在HTML源文件中被转换为撇号,就像我将浏览器内容粘贴到记事本一样。

更新 html2text看起来很有希望。 它正确处理HTML实体并忽略JavaScript。 但是,它并不完全产生纯文本; 它产生降价,然后不得不变成纯文本。 它没有任何示例或文档,但代码看起来很干净。


相关问题:

  • 滤除HTML标签并在python中解析实体
  • 在Python中将XML / HTML实体转换为Unicode字符串

  • html2text是一个Python程序,在这方面做得很好。


    注: NTLK不再支持clean_html功能

    下面的原始答案,并在评论部分的替代。


    使用NLTK

    我浪费了4-5个小时,解决了html2text的问题。 幸运的是我可能会遇到NLTK。
    它神奇地工作。

    import nltk   
    from urllib import urlopen
    
    url = "http://news.bbc.co.uk/2/hi/health/2284783.stm"    
    html = urlopen(url).read()    
    raw = nltk.clean_html(html)  
    print(raw)
    

    我发现的最好的一段代码提取文本没有得到JavaScript或不想要的东西:

    import urllib
    from bs4 import BeautifulSoup
    
    url = "http://news.bbc.co.uk/2/hi/health/2284783.stm"
    html = urllib.urlopen(url).read()
    soup = BeautifulSoup(html)
    
    # kill all script and style elements
    for script in soup(["script", "style"]):
        script.extract()    # rip it out
    
    # get text
    text = soup.get_text()
    
    # break into lines and remove leading and trailing space on each
    lines = (line.strip() for line in text.splitlines())
    # break multi-headlines into a line each
    chunks = (phrase.strip() for line in lines for phrase in line.split("  "))
    # drop blank lines
    text = 'n'.join(chunk for chunk in chunks if chunk)
    
    print(text)
    

    您只需在以下地方安装BeautifulSoup:

    pip install beautifulsoup4
    
    链接地址: http://www.djcxy.com/p/76881.html

    上一篇: Extracting text from HTML file using Python

    下一篇: XSLT does not output single <br> tag