从 HTML 标记中提取文本? [复制]
Posted
技术标签:
【中文标题】从 HTML 标记中提取文本? [复制]【英文标题】:Extracting Text from HTML markup? [duplicate] 【发布时间】:2012-06-12 04:13:21 【问题描述】:可能重复:Extracting text from html file using PythonParsing Source Code (Python) Approach: Beautiful Soup, lxml, html5lib difference?
目前有一个大型网页,其源代码约为 200,000 行几乎所有(如果不是全部)HTML。更具体地说,它是一个网页,其内容是由换行符分隔的几千块文本(尽管换行符并不具体意味着内容中有分隔)
我的主要目标是从源代码中提取文本,就像我将网页复制/粘贴到文本编辑器中一样。我想使用另一个解析函数,它最初接收复制/粘贴的文本而不是源代码。
为此,我目前正在使用 urllib2,并在 Beautiful Soup 中调用 .get_text()。问题是,Beautiful Soup 在我的代码中留下了大量的空白,并且很难将结果传递给第二个“文本”解析器。我已经对解析 HTML 进行了大量研究,但坦率地说,我不确定如何轻松解决这个问题。此外,我对如何使用 lxml 之类的导入来提取文本有点困惑。
tl;博士:有没有什么方法可以实现像我在网页上进行全选、复制、粘贴一样的结果?
【问题讨论】:
为了清楚起见,HTML 不是源代码。这是标记。 如果您有解决方案,但唯一的问题是空白太多,您就不能删除多余的空白吗?试试re.sub(r"\s+", " ", text)
。
--大卫 感谢您的指正! @GregHewgill 那会删除原始网页中存在的部分间距,不是吗?我拥有的另一个解析函数在其函数中使用这些空格作为各种分隔符,所以我不想删除它们。 ):
你为什么要多次发布这个问题?
【参考方案1】:
听起来您想将 HTML 呈现为文本,而不是提取各种标签的内容。
如果是这种情况,请考虑在您的 Python 代码中以 subprocess 的形式运行其中一个:
links -html-numbered-links 1 -html-images 1 -dump "file://$@"
lynx -force_html -dump "$@"
w3m -T text/html -F -dump "$@"
【讨论】:
【参考方案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 标记中提取文本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何从完整的 html 文本中从 <a> 标记中提取 url GET 参数