Можно ли определить селектор HTML, который объединяет несколько селекторов и разделяет их точкой с запятой?
Я пытаюсь разобрать простую 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 ответ
Множественные селекторы с щенком, похоже, не работают, здесь есть проблема: 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 используется для удаления последнего соответствующего текста разделителя.