2015-09-15 2 views
0

HTML:XPath выберите текст без результата childnode

<h2 class="reward__pledge-amount"> 
Pledge $1 or more 
    <div class="reward__currency-conversion"> 
     <h5 class="regular grey-dark"> 
      About <span>$1.00 USD</span> 
     </h5> 
    </div> 
</h2> 
<p class="reward__backer-count"> 
    <span class="ksr-icon__backer-badge"></span> 
    2 backers 
</p> 

SCRAPY оболочки:

sites = sel.css(".reward__info") 
for site in sites: 
    a = site.xpath("./h2[@class='reward__pledge-amount']/text()").extract() 
    b = site.xpath("./p[@class='reward__backer-count']/text()").extract() 
    print a 
    print b 
    break 

результат:

[u'\nPledge $1 or more\n', u'\n'] 
[u'\n', u'\n2 backers\n']  

Как вы можете видеть, text() возвращает список.
Я думал, это потому, что <h2> имеет в нем <div>, И <p> имеет <span>
Как я могу получить только text() под <h2> и <p> без childnode текста ???

как:

[u'\nPledge $1 or more\n'] 
[u'\n2 backers\n']  

ответ

0

Вы можете попробовать использовать normalize-space() в XPath предиката для text(), чтобы отфильтровать пустые текстовые узлы, что-то вроде:

a = site.xpath("./h2[@class='reward__pledge-amount']/text()[normalize-space()]").extract() 
b = site.xpath("./p[@class='reward__backer-count']/text()[normalize-space()]").extract() 
Смежные вопросы