2013-08-27 9 views
18

同じコンテンツを持つHTMLページを解析するために、私は鋸山を使用します。子供なしでノードテキストを取得するには?

<p class="parent"> 
    Useful text 
    <br> 
    <span class="child">Useless text</span> 
</p> 

私は方法page.css('p.parent').text鋸山リターン「便利なテキスト無駄なテキスト」を呼び出すとき。しかし、私は「役に立つテキスト」だけが必要です。

子どもなしでノードテキストを取得するにはどうすればよいですか?

答えて

26

のXPathによって変更されますが、テキストノードを選択するためのtext()ノード・テストが含まれています。かなりになることができますHTMLクラスを選択するために、XPathを使用し

page.xpath('//p[@class="parent"]/text()') 

問題の要素が複数のクラスに属する可能性がある場合は面倒なので、理想的ではないかもしれません。

page.css('p.parent > text()') 

p.parentの直接の子であるテキストノードを取得する:あなたが使用できるように

幸い鋸山は、CSSにtext()セレクターを追加します。これはまた、whtespaceのみであるいくつかのノードを返すので、それらをフィルタリングしなければならないかもしれません。

+1

text()セレクタは最もクリーンなソリューションのようです。ありがとうございました! –

0

page.css('p.parent').children.removeを使用できるはずです。

あなたのpage.css('p.parent').textは、子ノードのないテキストを返します。

注:あなたができるようpageremove

関連する問題