从HTML标记中提取文本?

2024-04-26 11:02:09 发布

您现在位置:Python中文网/ 问答频道 /正文

Possible Duplicate:
Extracting text from HTML file using Python
Parsing Source Code (Python) Approach: Beautiful Soup, lxml, html5lib difference?

目前有一个大型网页,其源代码约20万行几乎所有(如果不是全部)HTML。更具体地说,它是一个网页,它的内容是几千个由换行符分隔的文本块(尽管换行并不意味着内容之间存在分离)

我的主要目标是从源代码中提取文本,就好像我在复制/粘贴网页到文本编辑器中一样。我想使用另一个解析函数,它最初接收复制/粘贴的文本,而不是源代码。在

为此,我当前使用的是urllib2,并在Beautiful Soup中调用.get_text()。问题是,BeautifulSoup在我的代码中留下了大量的空白,而且很难将结果传递到第二个“文本”解析器中。但坦白地说,我还没有很容易地解决这个问题。此外,我对如何使用像lxml这样的导入来提取文本有点困惑。在

有没有什么可能的方法可以达到一个结果,就像我只是选择了所有,复制,粘贴在一个网页上?在


Tags: textfrom文本网页内容源代码粘贴html
2条回答

你试着去研究一个HTML解析器。如果您只希望html页面的核心部分没有标记符号,您可以使用:

from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        self.tags = []
        self.attrs = []
    def handle_starttag(self, tag, attrs):
        self.tags.append(tag)
        self.attrs.append(attrs)
    def handle_endtag(self, tag):
        if tag not in self.tags:return
        for x in reversed(self.tags):
            self.tags.pop()
            self.attrs.pop()
            if tag == x:return
    def handle_data(self, data):
        print data

parser = MyHTMLParser()
f = file("temp.html")
parser.feed(f.read())
f.close()

这将解析html页面中的数据。<div><h1>This is my webpage</h1><div></div></div>将被打印为This is my webpage。你可以修改任何你想显示不同部分,不同格式等的方法。只要改变你喜欢的基本类,我的代码应该只是让你开始在正确的道路上。在

听起来你想将HTML呈现为文本,而不是提取各种标记的内容。在

如果是这样的话,可以考虑从Python代码中以subprocess的形式运行其中一个:

  • links -html-numbered-links 1 -html-images 1 -dump "file://$@"
  • lynx -force_html -dump "$@"
  • w3m -T text/html -F -dump "$@"

相关问题 更多 >