使用XPath(在shell脚本中)解析HTML中的数据
我正试图用shell脚本解析一个相当简单的网页以获取信息。我现在使用的网页已经生成。例如,我希望将internet服务提供商上的信息拉入shell变量。为此,可以使用xmllint、XMLStarlet或xpath程序之一。我对shell脚本非常熟悉,但对XPath语法和用于实现XPath语法的实用程序还不熟悉,因此我希望有一些正确方向的指针 以下是shell脚本的开头:使用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
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