【发布时间】:2012-03-02 07:45:51
【问题描述】:
我正在尝试提取每个 HTML 标记,包括正则表达式的匹配项。例如,假设我想获取包含字符串“name”的每个标签,并且我有一个这样的 HTML 文档:
<html>
<head>
<title>This tag includes 'name', so it should be retrieved</title>
</head>
<body>
<h1 class="name">This is also a tag to be retrieved</h1>
<h2>Generic h2 tag</h2>
</body>
</html>
可能,我应该尝试使用正则表达式来捕获打开和关闭 "<>" 之间的每一个匹配项,但是,我希望能够根据这些匹配项遍历解析的树,这样我就可以获得兄弟姐妹或父母或“下一个元素”。在上面的示例中,一旦我知道他们是包含匹配项的标签的父母或兄弟姐妹,这相当于获得<head>*</head> 或<h2>*</h2>。
我尝试了 BeautifulSoap,但在我看来,当您已经知道要查找的标签类型或基于其内容时,它很有用。在这种情况下,我想先获得一个匹配项,以该匹配项为起点,然后像 BeautifulSoap 和其他 HTML 解析器那样导航树。
建议?
【问题讨论】:
-
在 Html 上使用正则表达式是困难的。我不建议你走这条路。你想用 Html 做什么?见这篇文章:codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html
-
我认为您并没有真正彻底了解这一点。怎么样:
<input name="foo"/>或<p> My <b>name</b> is beerbajay</p>?您期望应该返回什么? -
@beerbajay 不,如果检索该输入标签就可以了(因为它包含“名称”。显然,我的真实示例没有使用“名称”作为匹配项。
-
@AdamD 感谢您的链接:-)。我正在尝试进行匹配并获取该匹配附近的一些内容,以作为进一步分析的上下文。使用 HTML 标签让它变得更加优雅,即使它变得更加困难。
标签: python regex beautifulsoup parse-tree