20

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

div.a ul.b

或 XPath:

//div[@class="a"]//div[@class="b"]

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

4

4 回答 4

25

尝试这个:

  1. 安装http://www.w3.org/Tools/HTML-XML-utils/
    • Ubuntu:aptitude install html-xml-utils
    • 苹果系统:brew install html-xml-utils
  2. 保存网页(称为 filename.html)。
  3. 跑:hxnormalize -l 240 -x filename.html | hxselect -s '\n' -c "label.black"

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

#!/bin/bash

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

然后你可以运行:

cssgrep filename.html "label.black"

这将为label类的所有 HTML 元素生成内容black

-l 240参数对于避免解析输出中的换行符很重要。例如,如果<label class="black">Text to \nextract</label>是输入,则将-l 240HTML 重新格式化为<label class="black">Text to extract</label>,在第 240 列插入换行符,这简化了解析。也可以扩展到 1024 或更高。

也可以看看:

于 2013-01-06T21:41:53.417 回答
9

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

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

elfinder -s "div.a ul.b"

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

于 2012-06-05T03:06:24.790 回答
3

pup是一个用于处理 HTML 的命令行工具。它从标准输入读取,打印到标准输出,并允许用户使用 CSS 选择器过滤页面的某些部分。

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

例子:

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

$ pup --color 'title' < robots.html
<title>
 Robots exclusion standard - Wikipedia, the free encyclopedia
</title>
于 2020-05-12T07:46:11.273 回答
0
于 2011-09-07T17:08:28.460 回答