Я собираю статьи с разных сайтов, используя R (rvest), которые часто структурированы по-разному, и хотел бы извлечь все HTML-узлы (без дублирования), чьи потомки содержат некоторый текст, используя xpath.
Упрощенно, структура может выглядеть примерно так (без пробелов, которые были введены для удобства чтения):
<html>
<body>
<a name="SomeMarker">
<font style="FONT-SIZE: 12pt;"><b>Sports article</b></font>
</a>
<div>
<b>This is possibly an article heading</b>
<font style="FONT-SIZE: 10pt;"> This is the <i>body</i> of the article.</font
<font style="FONT-SIZE: 10pt;"> It could have <i><b>interesting tags</b></i> embedded in the text</font>
</div>
<p id="SomeId"><b>This is another article heading</b>
<font style="FONT-SIZE: 10pt;"> This is the <i>body</i> of the second article</font>
<p><font style="FONT-SIZE: 10pt;"> It could have further <i><b><u>interesting tags</u></b></i> embedded in the text</font></p>
</p>
</body>
</html>
Я пробовал несколько разных путей xpath - но они, кажется, всегда выбирают дублирующиеся узлы
"//a/following::*//*[text()]"
"//a/following::*/*[normalize-space(text())]"
"//a/following::*/*[normalize-space(text())]/parent::*"
и т. Д., Но все они приводят к различным перестановкам текстовых узлов
В настоящее время я получаю довольно много дублирующих узлов, например ::
[1] <div>\n<b>This is possibly an article heading</b><font style="FONT-SIZE: 10pt;"> This is the <i>body</i> of the article.</font><font style="FONT-SIZE: 10pt;"> It could have <i><b>interes ...
[2] <font style="FONT-SIZE: 10pt;"> This is the <i>body</i> of the article.</font>
[3] <i><b>interesting tags</b></i>
[4] <p id="SomeId"><b>This is another article heading</b><font style="FONT-SIZE: 10pt;"> This is the <i>body</i> of the second article.</font></p>\n
[5] <font style="FONT-SIZE: 10pt;"> This is the <i>body</i> of the second article.</font>
[6] <p><font style="FONT-SIZE: 10pt;"> It could have further <i><b><u>interesting tags</u></b></i> embedded in the text</font></p>
[7] <b><u>interesting tags</u></b>
Предпочтительным результатом является получение только узлов верхнего уровня, чьи потомки содержат некоторый текст, т. Е. В приведенном выше случае:
[1] <div><b>This is possibly an article heading</b><font style="FONT-SIZE: 10pt;"> This is the <i>body</i> of the article.</font><font style="FONT-SIZE: 10pt;"> It could have <i><b>interesting tags</b></i> embedded in the text</font></div>
[2] <p id="SomeId"><b>This is another article heading</b><font style="FONT-SIZE: 10pt;"> This is the <i>body</i> of the second article.</font><p><font style="FONT-SIZE: 10pt;"> It could have further <i><b><u>interesting tags</u></b></i> embedded in the text</font></p></p>
Я знаю xpath для простого извлечения текста - я на самом деле хочу, чтобы html-узлы не содержали тегов, поскольку я хотел бы выполнить дальнейшую обработку на узлах верхнего уровня (например, для извлечения заголовков). Большое спасибо.