我正在尝试编写一个 Bash 脚本,用于从 HTML 页面中提取信息(使用wget
)。我知道我的信息将位于<h*>
标签之间,但是有没有一种好的方法可以获取这些信息?
为了更准确,我们举一个例子:
< h1>header1</ h1>
< h2>header2</ h2>
< h2>otherHeader2</ h2> <
h1>lastHeader1</ h1>
< h2>lastHeader2</ h2>
我想提取“otherHeader2”,也就是 header1 之后的第二个(但它可能在任何地方)标题。
答案1
永远不要使用正则表达式来解析 html。始终使用适当的 html 或 xml 解析器。例如,使用xmlstarlet:
$ xmlstarlet sel -t -v '//h2[2]' html.html
otherHeader2
答案2
这是一个简单的 Python 脚本,它将解析您的 html 并将所有值放入列表中并打印出来。您可以用 Python 编写其余脚本,也可以从 Python 调用此脚本,或者将此简短代码作为片段插入 Bash。查看下面的示例。
测试.html
< h1>header1< /h1>
< h2>header2< /h2>
< h2>otherHeader2< /h2>
< h1>lastHeader1< /h1>
< h2>lastHeader2< /h2>
解析头文件.py
#!/usr/bin/env python
import sys, re
print re.findall(r'< h\d>(.*)< /h\d>', sys.stdin.read())
可以从 bash 调用脚本
cat test.html | parse_header.py
python 代码可以放入 bash 脚本中
cat test.html | python -c "import sys, re;print re.findall(r'< h\d>(.*)< /h\d>', sys.stdin.read())"
我认为最后一个选项对于你的情况来说不太好读。如果你有一些简单的代码,不值得把它放在自己的脚本中,那么这个选项更有意义。