从xpath中的多个子节点中选择文本

时间:2014-11-01 07:30:00

标签: python xpath

我需要在Python 2.6中使用XPath和lxml来提取两个文本项:

-Name One Type 1 Description 1

-Name Two Type 2 Description 2

我尝试使用以下Xpath:' // * [@ id ="结果"] / li / div / p / child :: text()&#39 ; 但是,这只给我以下文字

-Name One Type 1

-Name Two Type 2

有关正确使用Xpath的建议吗?

<div id="container">
  <ol id="results">
   <li class="mod1" data-li-position="0">
    <a href="first.link"><img src="image001.jpg"></a>
    <div class="bd">
     <h3>
      <a href="some.link">Category 1</a>
     </h3>
     <p class="description">
       <strong class="highlight">Name One</strong>
       <strong class="highlight">Type 1</strong>
       Description 1
     </p>
    </div>
   </li>
   <li class="mod2" data-li-position="1">
    <a href="second.link"><img src="image002.jpg"></a>
    <div class="bd">
     <h3>
      <a href="another.link">Category 2</a>
     </h3>
     <p class="description">
       <strong class="highlight">Name Two</strong>
       Description 2
       <strong class="highlight">Type 2</strong>
     </p>
    </div>
   </li>

1 个答案:

答案 0 :(得分:2)

XPath的最后一部分:

...../p/child::text()

...仅选择 <p>的孩子的孩子的文本节点。这就是你错过的原因,例如Description 1,因为它是<p>直接孩子。您可以尝试将该部分更改为:

...../p//text()

上面的XPath将选择所有文本节点,它们是<p>后代,换句话说,<p>内的所有文本节点。< / p>