首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python从HTML文件中提取文本

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

Stack Overflow用户
提问于 2008-11-30 02:28:05
回答 29查看 453.9K关注 0票数 282

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

我想要一些比使用正则表达式更健壮的东西,因为正则表达式在格式不佳的HTML上可能会失败。我看到很多人推荐Beautiful Soup,但我在使用它时遇到了一些问题。首先,它会拾取不需要的文本,比如JavaScript源。而且,它不能解释HTML实体。例如,我希望‘in HTML source’转换为文本中的撇号,就像我将浏览器内容粘贴到记事本中一样。

更新

看起来很有希望。它正确地处理HTML实体并忽略JavaScript。但是,它并不能准确地生成纯文本;它会生成必须转换为纯文本的markdown。它没有提供示例或文档,但代码看起来很干净。

相关问题:

过滤掉HTML标签并解析python中的实体

在Python中将XML/HTML实体转换为Unicode字符串

EN

回答 29

Stack Overflow用户

回答已采纳

发布于 2008-11-30 03:23:59

html2text

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

票数 165
EN

Stack Overflow用户

发布于 2011-11-20 20:34:10

注意:

NTLK不再支持

函数

下面是原始答案,评论部分提供了替代方案。

使用

NLTK

我浪费了4-5个小时来解决html2text的问题。幸运的是,我可以遇到NLTK。

它神奇地工作着。

代码语言:javascript
复制
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)
票数 103
EN

Stack Overflow用户

发布于 2010-10-21 21:14:39

我发现自己今天也面临着同样的问题。我编写了一个非常简单的HTML解析器来剥离传入内容的所有标记,只返回仅包含最少格式的剩余文本。

代码语言:javascript
复制
from HTMLParser import HTMLParser
from re import sub
from sys import stderr
from traceback import print_exc

class _DeHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.__text = []

    def handle_data(self, data):
        text = data.strip()
        if len(text) > 0:
            text = sub('[ \t\r\n]+', ' ', text)
            self.__text.append(text + ' ')

    def handle_starttag(self, tag, attrs):
        if tag == 'p':
            self.__text.append('\n\n')
        elif tag == 'br':
            self.__text.append('\n')

    def handle_startendtag(self, tag, attrs):
        if tag == 'br':
            self.__text.append('\n\n')

    def text(self):
        return ''.join(self.__text).strip()


def dehtml(text):
    try:
        parser = _DeHTMLParser()
        parser.feed(text)
        parser.close()
        return parser.text()
    except:
        print_exc(file=stderr)
        return text


def main():
    text = r'''
        
            
                Project: DeHTML

                Description:

                This small script is intended to allow conversion from HTML markup to 
                plain text.
            
        
    '''
    print(dehtml(text))


if __name__ == '__main__':
    main()
票数 55
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/328356

复制
相关文章

相似问题

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