Так как названия состояния у меня есть некоторый HTML код из http://chem.sis.nlm.nih.gov/chemidplus/name/acetone что я разбор и хочу, чтобы извлечь некоторые данные, такие как ацетон под MeSH Heading из моей аналогичной должности How to set up XPath query for HTML parsing?Могу ли я получить доступ к subchild родителя в XPath?
<div id="names">
<h2>Names and Synonyms</h2>
<div class="ds">
<button class="toggle1Col" title="Toggle display between 1 column of wider results and multiple columns.">↔</button>
<h3>Name of Substance</h3>
<div class="yui3-g-r">
<div class="yui3-u-1-4">
<ul>
<li id="ds2">
<div>2-Propanone</div>
</li>
</ul>
</div>
<div class="yui3-u-1-4">
<ul>
<li id="ds3">
<div>Acetone</div>
</li>
</ul>
</div>
<div class="yui3-u-1-4">
<ul>
<li id="ds4">
<div>Acetone [NF]</div>
</li>
</ul>
</div>
<div class="yui3-u-1-4">
<ul>
<li id="ds5">
<div>Dimethyl ketone</div>
</li>
</ul>
</div>
</div>
<h3>MeSH Heading</h3>
<ul>
<li id="ds6">
<div>Acetone</div>
</li>
</ul>
</div>
</div>
Ранее в других страницах я бы делать mesh_name = tree.xpath('//*[text()="MeSH Heading"]/..//div')[1].text_content()
для извлечения данных, потому что другие страницы имели сходные структуры, но теперь я вижу, что это не так, поскольку я не учитывал несогласованность. Итак, есть ли способ после перехода к узлу, который я хочу, а затем получить его подщелки, что позволяет обеспечить согласованность между разными страницами?
Будет ли tree.xpath('//*[text()="MeSH Heading"]//preceding-sibling::text()[1]')
работать?
Ах вы правы, я забыл о функциях , Хотя вы могли бы объяснить синтаксис xpath для этой функции? – TimTom
@TimTom Конечно, здесь мы размещаем 'h3' по тексту, получаем следующий следующий сиблинг и извлекаем текст всех элементов div внутри этого родного брата. Надеюсь, это немного изменит ситуацию. – alecxe