2017-05-26 5 views
1

Hier ist der HTML Ich arbeite mit:Kann nicht herausfinden, warum diese XPath-Selektor nicht funktioniert

<div class="left-info"> 
    <div itemprop="author" itemscope="" itemtype="http://schema.org/Organization"> 
    <meta content="/store/apps/developer?id=KONAMI" itemprop="url"> 
    <a class="document-subtitle primary" href="/store/apps/developer?id=KONAMI"> 
     <span itemprop="name">KONAMI</span> 
    </a> 
    <a class="document-subtitle category" href="/store/apps/category/GAME_SPORTS"> 
     <span itemprop="genre">Sports</span> 
    </a> 
    </div> 
</div> 

Ich habe eine Reihe von verschiedenen XPath-Selektoren versucht, aber aus irgendeinem Grund, ich kann‘ t nimm die Werte und KONAMI. Zum Beispiel:

//div[@itemprop="author"]//span[contains(@itemprop,"genre")]//text() 
//div[@itemprop="author"]//span[contains(@itemprop,"name")]//text() 

Das gibt mir KONAMI aber ein leeres Array statt Sports. Ich kann es nicht herausfinden.

Ich verwende Scrapy, um den Google Play Store zu scrappen. Die URL für das obige Beispiel lautet https://play.google.com/store/apps/details?id=jp.konami.pesam. Hier ist die parse Funktion:

def parse(self, response): 
    yield { 
     'utc': datetime.datetime.utcnow(), 
     'store': 'itunes', 
     'category': response.selector.xpath('//div[@itemprop="author"]//span[contains(@itemprop,"genre")]//text()').extract(), 
     'seller': response.selector.xpath('//div[@itemprop="author"]//span[contains(@itemprop,"name")]//text()').extract(), 
     'text': response.selector.xpath('//p[@itemprop="description"]/text()').extract() 
    } 

Antwort

1

Die HTML Sie im Browser sehen, ist nicht genau das gleiche wie von Scrapy analysiert (und Sie sollten immer erwarten, dass dies der Fall sein). Das "Genre" befindet sich unter einem anderen Elternteil und ist direkt erreichbar:

In [1]: response.xpath('//span[@itemprop="genre"]/text()').extract_first() 
Out[1]: u'Sports' 
+0

Ah, ich verstehe. Knifflig! Vielen Dank. –

+0

@EvanZamir yeah, beachten Sie die '.selector' ist nicht notwendig -' response' macht die Methoden des inneren Wählers .. – alecxe

+0

Ah, noch besser. Danke noch einmal. –

Verwandte Themen