#node.js #xpath #css-selectors #apify
Вопрос:
У меня есть следующие html-данные :
lt;span id="description"gt; lt;pgt;descriptionlt;/pgt; lt;pgt;descriptionlt;/pgt; lt;pgt;lt;/pgt; lt;h3gt;title1lt;/h3gt; some text. lt;brgt; lt;brgt; some text. lt;h3gt;title2lt;/h3gt; lt;pgt;lt;/pgt; lt;pgt;lt;/pgt; lt;divgt;datalt;/divgt; lt;h3gt;title3lt;/h3gt; lt;stronggt;datalt;/stronggt; lt;brgt; some text. lt;brgt; lt;brgt; some text. lt;pgt;lt;/pgt; lt;/spangt;
Мне нужно, чтобы все p
теги были до первого h3
тега.
Я попробовал Xpath //span[@id="description"]
, который получит все дочерние элементы span
тега, которые мне не нужны.
Я также попробовал //span[@id="description"]/h3[1]/preceding-sibling::p
, который вернул только первый предыдущий p
тег. Кроме того, выбор отдельных узлов p и их последующее объединение нецелесообразны, так как на разных страницах будет разное количество узлов p до первого h3.
Затем я попробовал использовать селекторы CSS и функцию удаления, $('#description').clone().children('div,h3').remove().end().html().trim()
. Что не очень хорошо работало, так как я не могу выбирать текстовые узлы с его помощью.
Могу ли я в любом случае разделить данные с помощью этих h3
тегов?
Ответ №1:
Твое выражение лица
//span[@id="description"]/h3[1]/preceding-sibling::p
должно сработать.
Похожее выражение
//span[@id="description"]/h3[1]//preceding-sibling::p
должно также сработать.
Также попробуйте это:
//span[@id="description"]/p[following-sibling::h3[contains(text(),"title1")]]
Комментарии:
1. Я использую код в платформе apify, когда я использую «//span[@id=»описание»]/h3[1]/предыдущий-брат::p», он автоматически читается как «//span[@id=»описание»]/h3[1]/предыдущий-брат::p[1]» и не возвращает все теги p до h3[1].
2. @neenkart У меня нет apify, поэтому, к сожалению, я не могу проверить это сам. Вы пробовали другие варианты ответа?
3. ОК. Да, я сделал это, но все равно это вернуло только первое появление. Итак, я собираюсь объявить по крайней мере 5 вхождений в качестве переменных и объединить их в одну переменную, на некоторых страницах я могу потерять данные, все еще надеясь, что это сработает. Спасибо.