2017-05-26 79 views
1

這裏是HTML我的工作:想不通,爲什麼這個XPath選擇不工作

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

我已經嘗試了很多不同的XPath選擇,但不管是什麼原因,我可以」噸拿起SportsKONAMI值。例如:

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

這讓我KONAMI但空數組,而不是Sports。我無法弄清楚。

我正在使用Scrapy來抓取Google Play商店。以上示例的網址爲https://play.google.com/store/apps/details?id=jp.konami.pesam。這裏是parse功能:

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() 
    } 

回答

1

您在瀏覽器中看到的HTML是不是通過解析Scrapy完全一樣的(和你應該總是期望這是這種情況)。 「類型」位於不同的父級,可直接聯繫:

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

啊,我明白了。整蠱!謝謝。 –

+0

@EvanZamir是的,請注意'.selector'是不必要的 - ''response'暴露了內部選擇器的方法.. – alecxe

+0

啊,甚至更好。再次感謝。 –