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

fjaof16o  于 2023-08-07  发布在  Shell
关注(0)|答案(5)|浏览(108)

我正在尝试解析一个相当简单的网页,以获取shell脚本中的信息。我现在使用的网页是生成的here。例如,我想将互联网服务提供商的信息拉入一个shell变量。使用xmlint、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/

ma8fv8wu

ma8fv8wu1#

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

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

字符串
您可以使用Chrome和开发人员工具找到节点的xpath。检查节点时,右键单击它并选择copyXPath。
我不会用这个太多,这不是很可靠。
您的页面上的所有信息都可以在其他地方找到:在自己的IP上运行whois...

0s0u357o

0s0u357o2#

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

czq61nw1

czq61nw13#

使用PhantomJs。它是一个无头的WebKit,允许您在网页上执行JavaScript/CoffeeScript。我想这能帮你解决问题。
Pjscrape是一个基于PhantomJs的有用的网页抓取工具。

cmssoen2

cmssoen24#

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


参见相关Feature Request for XPath

安装

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

k3bvogb1

k3bvogb15#

HTML-XML-utils

HTML-XML-utils包中有许多命令行工具可以解析HTML文件(例如hxselect匹配CSS选择器)。
还有xpath,它是Perl的XPath库(XML::Path)的命令行 Package 器。
相关:Command line tool to query HTML elements在SU

相关问题