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

问题描述 投票:0回答:5

我正在尝试解析一个相当简单的网页以获取 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 语法的实用程序:

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

html xml parsing shell xpath
5个回答
9
投票

快速而肮脏的解决方案...

xmllint --html -xpath "//table/tbody/tr[6]/td[2]" page.html

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

我不会太多使用这个,这不太可靠。

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


5
投票

你可以使用我的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

3
投票

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

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


3
投票

xpup

XML

用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

以下是解析 HTML 页面的示例:

$ xpup '/*/head/title' < <(curl -sL https://example.com/)
Example Domain

pup

对于 HTML 解析,请尝试

pup
。例如:

$ pup 'title text{}' -f <(curl -sL https://example.com/)
Example Domain

请参阅相关的 XPath 功能请求

安装

安装方式:

go get github.com/ericchiang/pup


1
投票

HTML-XML-utils

HTML-XML-utils包中有许多命令行工具可以解析HTML文件(例如

hxselect
来匹配CSS选择器)。

还有

xpath
,它是 Perl 的 XPath 库的命令行包装器 (
XML::Path
)。

相关:用于查询 HTML 元素的命令行工具位于 SU

© www.soinside.com 2019 - 2024. All rights reserved.