xmllint + xpath = 命令行网页信息提取
昨天看到一个玩意儿叫 XPath ,就是 @Anho 同学他们搞的那个,用来提取网页信息的,我觉得 xpath 是个好东西!
然后我想到 libxml2 提供了一个命令行工具叫 xmllint 。我发现它有个 --xpath 的选项可以执行 xpath ,还有个 --html 选项可以解析 html 。经过一些实验,我得到了下面的命令:
在 123cha 上查询 8.8.8.8 ,并提取结果(ul#csstb):
curl http://www.123cha.com/ip/?q=8.8.8.8 2>/dev/null | xmllint --html --xpath "//ul[@id='csstb']" - 2>/dev/null | sed -e 's/<[^>]*>//g'
结果:
[您的查询]:8.8.8.8
本站主数据:
美国
本站辅数据:Google Public DNS提供:hypo
美国 Google免费的Google Public DNS提供:zwstar参考数据一:美国
参考数据二:美国
这意味着什么?这意味着各种简单的网页信息提取任务可以用 shell 脚本完成。如果你以前为了实现同样的功能,动辄 BeautifulSoup 的话,可以换了。
然后我想到 libxml2 提供了一个命令行工具叫 xmllint 。我发现它有个 --xpath 的选项可以执行 xpath ,还有个 --html 选项可以解析 html 。经过一些实验,我得到了下面的命令:
在 123cha 上查询 8.8.8.8 ,并提取结果(ul#csstb):
curl http://www.123cha.com/ip/?q=8.8.8.8 2>/dev/null | xmllint --html --xpath "//ul[@id='csstb']" - 2>/dev/null | sed -e 's/<[^>]*>//g'
结果:
[您的查询]:8.8.8.8
本站主数据:
美国
本站辅数据:Google Public DNS提供:hypo
美国 Google免费的Google Public DNS提供:zwstar参考数据一:美国
参考数据二:美国
这意味着什么?这意味着各种简单的网页信息提取任务可以用 shell 脚本完成。如果你以前为了实现同样的功能,动辄 BeautifulSoup 的话,可以换了。
还没人转发这篇日记