是否有类似"CSS选择器"或XPath grep的东西?

Bol*_*wyn 15 html xml grep selector findinfiles

我需要找到一堆HTML文件中的所有位置,它们位于以下结构(CSS)中:

div.a ul.b
Run Code Online (Sandbox Code Playgroud)

或XPath:

//div[@class="a"]//div[@class="b"]
Run Code Online (Sandbox Code Playgroud)

grep在这里没有帮助我.是否有一个命令行工具可以返回符合此标准的所有文件(以及可选的所有位置)?即,如果文件与某个HTML或XML结构匹配,则返回文件名.

Dav*_*vis 19

试试这个:

  1. 安装http://www.w3.org/Tools/HTML-XML-utils/.
  2. 保存网页(称之为filename.html).
  3. 跑: hxnormalize -l 240 -x filename.html | hxselect -s '\n' -c "label.black"

"label.black"CSS选择器在哪里唯一标识HTML元素的名称.编写一个名为的帮助脚本cssgrep:

#!/bin/bash

# Ignore errors, write the results to standard output.
hxnormalize -l 240 -x $1 2>/dev/null | hxselect -s '\n' -c "$2"
Run Code Online (Sandbox Code Playgroud)

然后你可以运行:

cssgrep filename.html "label.black"
Run Code Online (Sandbox Code Playgroud)

这将为label该类的所有HTML 元素生成内容black.另见:https://superuser.com/a/529024/9067

  • 大!奇迹般有效.我在这里扩展了您的解决方案:https://gist.github.com/4473790顺便说一句:在Ubuntu上,您可以使用`aptitude install html-xml-utils`获取工具. (2认同)

小智 8

我已经使用Node JS构建了一个命令行工具.您输入一个CSS选择器,它将搜索目录中的所有HTML文件,并告诉您哪些文件与该选择器匹配.

您需要将Element Finder安装cd到要搜索的目录中,然后运行:

elfinder -s "div.a ul.b"
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://keegan.st/2012/06/03/find-in-files-with-css-selectors/


kev*_*kev 7

至少有4个工具:

  • pup - 受到 jq 的启发,pup 旨在成为一种从终端探索 HTML 的快速灵活的方式。

  • htmlq - 类似于 jq,但针对 HTML。使用 CSS 选择器从 HTML 文件中提取内容。

  • hq - 使用 CSS 和 XPath 选择器的轻量级命令行 HTML 处理器。

  • xq - 命令行 XML 和 HTML 美化器和内容提取器。

例子:

$ wget http://en.wikipedia.org/wiki/Robots_exclusion_standard -O robots.html

$ pup --color 'title' < robots.html
<title>
 Robots exclusion standard - Wikipedia
</title>

$ htmlq --text 'title' < robots.html
Robots exclusion standard - Wikipedia

$ hq --xpath '//title' < robots.html
<title>robots.txt - Wikipedia</title>

$ xq --xpath '//title' < robots.html
robots.txt - Wikipedia
Run Code Online (Sandbox Code Playgroud)