2017-05-26 77 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

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