Я новичок в xpath , и я работаю с scrapy , чтобы получать текст с разных генерируемых HTML-страниц.
Я получаю {id} тега заголовка от пользователя (<h1|2|.. id="title-{id}">text</h1|2|3..>
). Мне нужно получить текст из всех тегов HTML между этим заголовком и следующим заголовком того же уровня. Поэтому, если заголовок h1, мне нужно получить весь текст всех тегов до следующего заголовка h1.
Все идентификаторы заголовков имеют одинаковый шаблон "title- {id}", где генерируется {id}.
Чтобы было понятнее, вот пример:
<html>
<body>
...
<h2 id="tittle-id1">id1</h2>
bunch of tags containing text I want to get
<h2 id="tittle-id2">id2</h2>
...
</body>
</html>
ПРИМЕЧАНИЕ. Я не знаю, какой это может быть заголовок. Это может быть любой из тегов заголовка html от <h1>
до <h6>
ОБНОВЛЕНИЕ:
Пробуя несколько вещей, я заметил, что не уверен, что следующий заголовок того же уровня или вообще существует. Так как заголовки используются как заголовки и подзаголовки. Данный идентификатор может быть последним подзаголовком, поэтому у меня будет заголовок более высокого уровня после или даже последний из страниц. Так что в основном у меня есть только идентификатор заголовка, и мне нужно получить весь текст «абзаца».
Работа вокруг:
Я нашел своего рода обходное решение:
Я делаю это в 3 шага:
Сначала я использую //*[@id='title-{id}]
, что позволяет мне получить полную строку с тегом, так что теперь я знаю, какой это заголовок тега.
Во-вторых, я использую //*[id='title-{id}]/following-sibling::*
, это позволяет искать следующий заголовок того же или более высокого уровня {myHeader}.
Наконец, я использую //*[id='title-{id}]/following-sibling::*
и //{myHeader}//preceding-sibling::*
, чтобы узнать, что находится между или идти до конца страницы, если заголовок не найден.