命令行 CSS 选择器工具

Dav*_*vis 20 html web grep command-line css

什么工具(最好用于 Linux)可以根据其 CSS 路径选择 HTML 元素的内容?

例子

例如,考虑以下 HTML 文档:

<html>
<body>
  <div class="header">
  <h1>Header</h1>
  </div>
  <div class="content">
    <table>
      <tbody>
      <tr><td class="data">Tabular Content 1</td></tr>
      <tr><td class="data">Tabular Content 2</td></tr>
      </tbody>
    </table>
  </div>
  <div class="footer">
  <p>Footer</p>
  </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

什么命令行程序(例如,一种“cssgrep”)可以使用 CSS 选择器提取值?那是:

cssgrep page.html "body > div.content > table > tbody > tr > td.data"
Run Code Online (Sandbox Code Playgroud)

该程序会将以下内容写入标准输出:

Tabular Content 1
Tabular Content 2
Run Code Online (Sandbox Code Playgroud)

相关链接

谢谢!

Dav*_*vis 17

使用W3C 工具进行 HTML/XML 解析和使用 CSS 选择器提取内容。例如:

hxnormalize -l 240 -x filename.html | hxselect -s '\n' -c "td.data"
Run Code Online (Sandbox Code Playgroud)

将产生所需的输出:

Tabular Content 1
Tabular Content 2
Run Code Online (Sandbox Code Playgroud)

使用 240 个字符的行长度可确保内容较长的元素不会被拆分为多行。该hxnormalize -x命令创建一个格式良好的 XML 文档,可供hxselect.

  • 对于 macOS 用户,`brew install html-xml-utils`。 (2认同)

小智 7

CSS 解决方案

Element Finder 命令将部分完成此任务:

例如:

elfinder -j -s td.data -x "html"
Run Code Online (Sandbox Code Playgroud)

这会将结果呈现为可以提取的 JSON 格式。

XML 解决方案

XML ::特威格模块(” sudo apt-get install xml-twig-tools“),带有一个名为工具xml_grep,它能够仅仅做到这一点,前提是你的HTML是良好的,当然。

很抱歉,我目前无法对此进行测试,但是这样的事情应该可行:

xml_grep -t '*/div[@class="content"]/table/tbody/tr/td[@class="data"]' file.html
Run Code Online (Sandbox Code Playgroud)


pea*_*eak 6

https://github.com/ericchiang/pup有一种基于 CSS 的查询语言,与您的示例非常一致。事实上,根据您的输入,以下命令:

pup "body > div.content > table > tbody > tr > td.data text{}"
Run Code Online (Sandbox Code Playgroud)

产生:

Tabular Content 1
Tabular Content 2
Run Code Online (Sandbox Code Playgroud)

尾随text{}删除 HTML 标签。

一个不错的功能是不需要提供完整路径,因此再次使用您的示例:

$ pup 'td.data text{}' < input.html
Tabular Content 1
Tabular Content 2
Run Code Online (Sandbox Code Playgroud)

的一个优点pup是它使用 golang.org/x/net/html 包来解析 HTML5。