在HTML文件中查找特定标签

时间:2012-07-02 05:38:11

标签: html regex linux bash

我有一些html文件,想要在某些标签之间提取内容: 页面标题 这里有一些标记的内容。

<p>A paragraph comes here</p>
<p>A paragraph comes here</p><span class="more-about">Some text here</span><p class="en-cpy">Copyright &copy; 2012 </p>

我只想要这些标签:head,p 但正如在第二段中可以看到的那样,最后一个标签是以p开头但不是我的欲望标签,我不想要它的内容。 我使用以下脚本来提取我想要的文本,但是我无法过滤出标签,例如我示例中的最后一个标签....如何仅提取<p>标签?

grep "<p>" $File | sed -e 's/^[ \t]*//'

我必须补充一点,最后一个标签(我不希望出现在输出中)就在我想要的一个标签之后(如我的例子中所示)并使用grep命令该行的所有内容将作为输出返回...(这是我的问题)

3 个答案:

答案 0 :(得分:3)

别。尝试使用regex来解析 HTML 将是painful。使用RubyNokogiri之类的内容,或您熟悉的类似语言+库。

答案 1 :(得分:0)

xmllint --html --xpath "//*[name()='head' or name()='p']" "$file"

如果您正在处理损坏的HTML,则可能需要使用不同的解析器。这是使用lxml基本相同的“单行”。只需将脚本传递给您的网址

即可
#!/usr/bin/env python3
from lxml import etree
import sys

print('\n'.join(etree.tostring(x, encoding="utf-8", with_tail=False).decode("utf-8") for x in (lambda i: etree.parse(i, etree.HTMLParser(remove_blank_text=1, remove_comments=1)).xpath("//*[name()='p' or name()='head']"))(sys.argv[0])))

答案 2 :(得分:0)

在&lt; p&gt;之间提取文字和&lt; / p&gt;,试试这个

perl -ne 'BEGIN{$/="</p>";$\="\n"}s/.*(<p>)/$1/&&print' < input-file > output-file

perl -n0l012e 'print for m|<p>.*?</p>|gs'