我正在尝试解析一个相当简单的网页以获取 shell 脚本中的信息。我现在正在使用的网页是在here生成的。例如,我想将互联网服务提供商的信息拉入 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.>)"
为了您的方便,这里有一个用于在线动态测试 XPath 语法的实用程序:
快速而肮脏的解决方案...
xmllint --html -xpath "//table/tbody/tr[6]/td[2]" page.html
您可以使用 Chrome 和开发人员工具找到节点的 xpath。检查节点时,右键单击它并选择复制 XPath。
我不会太多使用这个,这不太可靠。
您页面上的所有信息都可以在其他地方找到:例如在您自己的 IP 上运行 whois...
你可以使用我的Xidel。从 cli 中的 html 页面中提取值是其主要目的。虽然它不是一个标准工具,但它是一个单一的、无依赖的二进制文件,并且无需 root 即可安装/运行。
可以直接从网页读取数值,无需涉及其他程序。
使用 XPath:
xidel http://aruljohn.com/details.php -e '//td[text()="Internet Provider"]/following-sibling::td'
或者使用模式匹配:
xidel http://aruljohn.com/details.php -e '<td>Internet Provider</td><td>{.}</td>' --hide-variable-names
xpup
用Go编写的命令行XML解析工具。例如:
$ curl -sL https://www.w3schools.com/xml/note.xml | xpup '/*/body'
Don't forget me this weekend!
或:
$ xpup '/note/from' < <(curl -sL https://www.w3schools.com/xml/note.xml)
Jani
以下是解析 HTML 页面的示例:
$ xpup '/*/head/title' < <(curl -sL https://example.com/)
Example Domain
pup
pup
。例如:
$ pup 'title text{}' -f <(curl -sL https://example.com/)
Example Domain
请参阅相关的 XPath 功能请求。
安装方式:
go get github.com/ericchiang/pup
。
HTML-XML-utils包中有许多命令行工具可以解析HTML文件(例如
hxselect
来匹配CSS选择器)。
还有
xpath
,它是 Perl 的 XPath 库的命令行包装器 (XML::Path
)。
相关:用于查询 HTML 元素的命令行工具位于 SU