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

使用XPath(在shell脚本中)解析HTML中的数据,html,xml,parsing,shell,xpath,Html,Xml,Parsing,Shell,Xpath,我正试图用shell脚本解析一个相当简单的网页以获取信息。我现在使用的网页已经生成。例如,我希望将internet服务提供商上的信息拉入shell变量。为此,可以使用xmllint、XMLStarlet或xpath程序之一。我对shell脚本非常熟悉,但对XPath语法和用于实现XPath语法的实用程序还不熟悉,因此我希望有一些正确方向的指针 以下是shell脚本的开头: HTMLISPInformation="$(curl --user-agent "Mozilla/5.0" http://a

我正试图用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语法的实用程序:

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

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

您可以使用我的。它的主要目的是从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

快速和肮脏的解决方案

xmllint --html -xpath "//table/tbody/tr[6]/td[2]" page.html
您可以使用Chrome和开发人员工具找到节点的xpath。检查节点时,右键单击它并选择copy XPath

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

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

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

还有xpath,它是Perl的xpath库XML::Path的命令行包装器

相关:在苏

XML 用Go编写的命令行XML解析工具。例如:

$ curl -sL https://www.w3schools.com/xml/note.xml | xpup '/*/body'
Don't forget me this weekend!
$ pup 'title text{}' -f <(curl -sL https://example.com/)
Example Domain
或:

见相关文件

安装
安装人:获取github.com/erickiang/pup。

查看。谢谢。我会看一看,供我个人使用。但是,我希望完成的任务是在一台没有授予我root访问权限的服务器上完成,这就是为什么我提到了xmllint之类的标准工具?您可以将它复制到您的用户文件夹中,然后从那里运行它
$ xpup '/*/head/title' < <(curl -sL https://example.com/)
Example Domain
$ pup 'title text{}' -f <(curl -sL https://example.com/)
Example Domain