Как указать итерационный элемент в Xpaths в цикле в Python - PullRequest
0 голосов
/ 03 июля 2018

У меня есть такие элементы, как:

<div>
<h4> Introduction </h4>
<p> Some text relatted to introduction </p>
<h4> Abstract </h4>
<p> Abstract text </h4>
<h4> reports </h4>
<p> report 1 details </p>
<p> report 2 details </p>
<p> report 3 details </p>
<h4> Conclusion </h4>
<p> Conclusion text </p></div>

Я должен извлечь следующую информацию в этом формате.

`[ {title: 'вводная часть', 'текст': ['Некоторый текст относится к введению']}, {'title': 'Abstract', 'text': ['Abstract text']}, {'title': 'reports ',' текст ': [' подробности отчета 1 ',' подробности отчета 2 ',' подробности отчета 3 ']}, {' title ':' Заключение ',' текст ': [' Текст заключения ']}]

  • Мы можем перебрать <h4> и выбрать следующие <p> теги. Но как написать условие для выбора тегов p между двумя непосредственными тегами <h4>?

Пожалуйста, помогите мне в решении проблемы. Заранее спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Я не хочу давать полный (копируемый и вставляемый) ответ на Python, так как вопрос очень редкий. Тем не менее, я могу дать несколько советов:

Вы можете получить головы, используя XPath, используя синтаксис: nth-child () / [], например.

//h4[1]

для получения 1-го h4 = Введение, //h4[2] для 2-го и т. Д. Затем вы можете выбрать братьев и сестер аналогичным образом, например,

//h4[3]/following-sibling::p[1]
//h4[3]/following-sibling::p[2]
//h4[3]/following-sibling::p[3]

Для получения трех частей отчетов или //h4[2]/following-sibling::p[1] для получения текста тезисов.

Предлагаю взглянуть на 2.7 XML API :

import xml.etree.ElementTree as ET
root = ET.parse(filename)
result = ''

for elem in root.findall('//h4[2]/following-sibling::p[1]'):
   result = elem.text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...