Есть ли что-то вроде "CSS-селектор" или XPath grep?

Мне нужно найти все места в куче файлов HTML, которые лежат в следующей структуре (CSS):

div.a ul.b

или XPath:

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

grep не помогает мне здесь Существует ли инструмент командной строки, который возвращает все файлы (и, возможно, все места в них), которые соответствуют этому критерию? Т.е. возвращает имена файлов, если файл соответствует определенной структуре HTML или XML.

3 ответа

Решение

Попробуй это:

  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"

Затем вы можете запустить:

cssgrep filename.html "label.black"

Это сгенерирует контент для всего HTML label элементы класса black, Смотрите также: https://superuser.com/a/529024/9067

Я создал инструмент командной строки с 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/

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>

Пер Ната ответ здесь:

Как разобрать XML в Bash?

Command-line tools that can be called from shell scripts include:

4xpath - command-line wrapper around Python's 4Suite package
XMLStarlet
xpath - command-line wrapper around Perl's XPath library
Другие вопросы по тегам