2016-07-04 4 views
0

Es ist OKPython Scrapy kann nicht Pseudo-Klasse bekommen ": nicht()"

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

Aber

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

funktioniert nicht zu schreiben. Es sagt mir:

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

Ja, der 15. Buchstabe im ‚.text: nicht (.text .text)> p :: Text‘ ‚ist‘, aber wie kann ich diese Bedeutung haben, ohne eine ''?

aktualisieren

Es <div class='text'> s verschachtelt sind, möchte ich das direkt unter der ersten <div class='text'> s <p> alle extrahieren.

Zum Beispiel:

<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> 

Ich möchte Texte in den ersten beiden <p> zu bekommen. Ich kann .comment und .sub_comment nicht verwenden, um sie zu unterscheiden, weil sie sich von Fall zu Fall ändern und nicht definitiv comment in der Außenseite und im inneren Tag sind.

+0

Ihre Frage scheint mir unklar, können Sie Beispiel-Markup geben Sie versuchen, mit diesem Selektor übereinstimmen? –

+0

@PawelMiech Ich habe die Frage aktualisiert. Ich habe dieses Problem mit xpath gelöst. Glaubst du, es gibt eine CSS-Lösung? –

Antwort

0

Wie wäre es mit nth-child(1)?

So Ihre CSS wäre:

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

In Scrapy:

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'] 

Es gibt schöne Erklärung und Demo von n-Kind in this tutorial here (nach unten scrollen zu Ziffer 22).