Можно ли определить селектор HTML, который объединяет несколько селекторов и разделяет их точкой с запятой? - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь разобрать простую HTML-страницу с pup . Это синтаксический анализатор командной строки HTML, который принимает общие селекторы HTML.

Я хочу выбрать:

'div.aclass text{}' #(would be SampleA)

и я также хочу выбрать:

'div.bclass text{}' #(would be SampleB)

и я хочу объединить их и вставить некоторый пользовательский текст, чтобы получить:

SampleA;MYEXTRASTRING;SampleB

Я хочу избегать называть щенка несколько раз, потому что это медленно.

Я могу выбрать несколько тегов:

'div.aclass text{}, div.bclass text{}'

но это приведет к:

SampleA
SampleB

Есть ли лучший выбор, чем щенок для этой цели?

(Примечание: Python НЕ является опцией, поскольку он очень медленный для моих нужд.)

1 Ответ

0 голосов
/ 05 января 2019

Множественные селекторы с щенком, похоже, не работают, здесь есть проблема: https://github.com/ericchiang/pup/issues/59

Для достижения вашей цели я бы предложил использовать команду hxselect , которая находится внутри HTML-XML-утилит : https://www.w3.org/Tools/HTML-XML-utils/README

Пример:

curl -s http://example.com/ | hxselect -c 'body > div:nth-child(1) > h1:nth-child(1)', 'body > div:nth-child(1) > p:nth-child(3) > a:nth-child(1)' -s ';MYEXTRASTRING;' | sed 's/\(.*\);MYEXTRASTRING;/\1/'

часть скручивания:

curl используется для загрузки html-содержимого http://exmaple.com

hxselect part:

hxselect поддерживает несколько селекторов CSS. Используйте , для разделения этих селекторов.

-c: печатать только содержимое без HTML-тега

-s: текст разделителя после каждого совпадения. В вашем случае это ;MYEXTRASTRING;

седельная часть:

Поскольку текст -s разделитель будет добавляться для каждого совпадения, это означает, что он будет добавлен дважды. sed используется для удаления последнего сопоставленного текста разделителя.

...