使用XPath解析HTML中的数据(在shell脚本中)

d3p*_*3pd 5 html xml shell xpath parsing

我试图解析一个相当简单的网页,以获取shell脚本中的信息.我现在正在使用的网页是在这里生成的.例如,我想将互联网服务提供商的信息提取到shell变量中.为此目的,使用其中一个程序xmllint,XMLStarlet或xpath可能是有意义的.我对shell脚本非常熟悉,但我不熟悉XPath语法和用于实现XPath语法的实用程序,所以我很欣赏一些指向正确方向的指针.

这是shell脚本的开头:

HTMLISPInformation="$(curl --user-agent "Mozilla/5.0" http://aruljohn.com/details.php)"
# ISP="$(<XPath magic goes here.>)"
Run Code Online (Sandbox Code Playgroud)

为方便起见,这是一个在线动态测试XPath语法的实用程序:

http://www.bit-101.com/xpath/

Mic*_*let 6

快速又脏的解决方案......

xmllint --html -xpath "//table/tbody/tr[6]/td[2]" page.html
Run Code Online (Sandbox Code Playgroud)

您可以使用Chrome和开发者工具找到节点的xpath.检查节点时,右键单击它并选择复制XPath.

我不会用太多,这不太可靠.

您的页面上的所有信息都可以在其他地方找到:例如,在您自己的IP上运行whois ...


Ben*_*ela 5

你可以用我的 Xidel。从 cli 中的 html 页面中提取值是其主要目的。尽管它不是标准工具,但它是一个独立的、无依赖的二进制文件,无需 root 即可安装/运行。

它可以直接从网页中读取值,无需其他程序。

使用 XPath:

 xidel http://aruljohn.com/details.php -e '//td[text()="Internet Provider"]/following-sibling::td'
Run Code Online (Sandbox Code Playgroud)

或者使用模式匹配:

 xidel http://aruljohn.com/details.php -e '<td>Internet Provider</td><td>{.}</td>' --hide-variable-names
Run Code Online (Sandbox Code Playgroud)


asg*_*oth 3

考虑使用PhantomJs。它是一个无头 WebKit,允许您在网页上执行 JavaScript/CoffeeScript。我认为它可以帮助您解决您的问题。

Pjscrape是一个基于 PhantomJs 的有用的网页抓取工具。