2014-11-01 72 views
1

我需要使用XPath与LXML在Python 2.6中提取两个文本项:选择文本

杂牌一个类型1的说明1

杂牌两个类型2说明2

我使用以下XPath尝试: '// * [@ ID = “成果”]/LI/DIV/p /儿童::文本()' 但是这给了我只是下面的文字

-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

您的XPath的最后这部分:

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

...只选择文本节点是孩子<p>孩子的。这就是为什么你错过了,例如,Description 1,因为它是直接子<p>。你可以试着改变部分是如下:

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

以上的XPath将选择这是后代<p>,换句话说,就是所有文本节点,所有的文本内的任意位置<p>节点。

+0

谢谢!工作很好。 – crypterr 2014-11-01 09:53:48