2016-07-04 5 views
0

それはPythonのScrapyは擬似クラスを取得することはできません ":ない()"

content.css('.text>p::text').extract() 

しかし

content.css('.text:not(.text .text)>p::text').extract() 

が動作しません書き込みにOKです。 「: 『ではない(.textセクションは.text)> P ::テキストが.textの』」ですが、どのように私は使用せず、この意味を表現することができますはい、15位の文字が

SelectorSyntaxError: Expected ')', got <S ' ' at 15> 

: それは私に語りました''?

更新

ネストされた<div class='text'> sがありますが、私は右の最初<div class='text'>の下にすべての<p> Sを抽出したいです。例えば

<div class='text comment'> 
    <strong>abc</strong> 
    <span>def</span> 
    <p>xxxxxxxxxxxxx</p> 
    <p>xxxxxxxxxxxxxxxxxxxxxxxxxxx</p> 
    <div class='text sub_comment'> 
     <strong>lst</strong> 
     <span>lll</span> 
     <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> 
     <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> 
    </div> 
</div> 

私は、最初の2つの<p>でテキストを取得したいです。私は.comment.sub_commentを区別するために使用することはできません。大文字と小文字が区別され、外側にはcomment、内側タグにはsub_commentはありません。

+0

あなたの質問は私には不明なようですが、このセレクタと一致させようとしているサンプルマークアップを使用できますか? –

+0

@PawelMiech質問を更新しました。私はxpathを使ってこの問題を解決しました。あなたはCSSのソリューションがあると思いますか? –

答えて

0

お試しはいかがですかnth-child(1)

だからあなたのCSSは次のようになります。

Scrapyで
".text:nth-child(1)>p" 

In [54]: from scrapy import Selector 

In [55]: a 
Out[55]: u"<div><div class='text comment'> <strong>abc</strong> <span>def</span> <p>xxxxxxxxxxxxx</p> <p>xxxxxxxxxxxxxxxxxxxxxxxxxxx</p> <div class='text sub_comment'>  <strong>lst</strong>  <span>lll</span>  <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p>  <p>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</p> </div></div></div>" 

In [56]: sel = Selector(text=a) 

In [57]: sel.css(".text:nth-child(1)>p::text").extract() 
Out[57]: [u'xxxxxxxxxxxxx', u'xxxxxxxxxxxxxxxxxxxxxxxxxxx'] 

this tutorial hereのn番目の子の素敵な説明とデモは(第22項までスクロール)があります。

関連する問題