7

我正在尝试解析一个相当简单的网页以获取 shell 脚本中的信息。我现在使用的网页是在这里生成的。例如,我想将有关 Internet 服务提供商的信息提取到 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/

4

5 回答 5

8

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

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

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

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

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

于 2012-12-26T21:16:02.467 回答
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
于 2012-12-26T21:13:02.017 回答
3

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

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

于 2012-12-26T20:08:18.713 回答
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

安装

安装者:go get github.com/ericchiang/xpup


pup

对于 HTML 解析,请尝试pup. 例如:

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

请参阅 XPath 的相关功能请求

安装

安装者:go get github.com/ericchiang/pup

于 2018-04-11T21:10:33.227 回答
0

HTML-XML-utils

HTML-XML-utils包中有许多命令行工具可以解析 HTML 文件(例如hxselect匹配 CSS 选择器)。

还有xpath一个围绕 Perl 的 XPath 库 ( ) 的命令行包装器XML::Path

相关:在 SU查询 HTML 元素的命令行工具

于 2015-10-17T00:27:24.670 回答