可能重复:
Extracting text from HTML file using Python
Parsing Source Code (Python) Approach: Beautiful Soup, lxml, html5lib difference?
目前有一个大型网页,其源代码几乎是所有(如果不是全部)HTML的约200,000行。更具体地说,它是一个网页,其内容是由换行符分隔的几千个文本块(尽管换行符并不意味着内容中存在分离)
我的主要目标是从源代码中提取文本,就好像我正在将网页复制/粘贴到文本编辑器中一样。我想使用另一种解析函数,它最初采用复制/粘贴文本而不是源代码。
要做到这一点,我目前正在使用urllib2,并在Beautiful Soup中调用.get_text()。问题是,Beautiful Soup在我的代码中留下了大量的空白区域,很难将结果传递给第二个“文本”解析器。我已经做了很多关于解析HTML的研究,但我坦率地不确定如何轻松解决这个问题。此外,我对如何使用像lxml这样的导入来提取文本感到困惑。
TL;博士:有没有可能的方法来实现结果,好像我刚刚在网页上选择全部,复制,粘贴?
答案 0 :(得分:1)
听起来您想要将HTML呈现为文本,而不是提取各种标签的内容。
如果是这种情况,请考虑从Python代码中运行其中一个subprocess:
links -html-numbered-links 1 -html-images 1 -dump "file://$@"
lynx -force_html -dump "$@"
w3m -T text/html -F -dump "$@"
答案 1 :(得分:0)
您是否尝试过查看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
。您可以修改任何想要显示不同部分,不同格式等的方法。只需根据自己的喜好更改基本类,我的代码应该让您开始正确的道路。