2016-09-27 55 views
1

我想從這個website湊了一些數據,我的蜘蛛的代碼是:Python的XPath的選擇得到錯誤

# -*- coding: utf-8 -*- 
import scrapy 
from coder.items import CoderItem 
# from scrapy.loader import ItemLoader 


class LivingsocialSpider(scrapy.Spider): 
    name = "livingsocial" 
    allowed_domains = ["livingsocial.com"] 
    start_urls = (
     'http://www.livingsocial.com/cities/15-san-francisco', 
    ) 

    def parse(self, response): 
     # deals = response.xpath('//li') 
     for deal in response.xpath('//li/a//h2'): 
      item = CoderItem() 
      item['title'] = deal.xpath('text()').extract_first() 
      yield item 

它工作得很好,但問題是,當我變成

for deal in response.xpath('//li'): 
    item = CoderItem() 
    item['title'] = deal.xpath('a//h2/text()').extract_first() 
    yield item 

這,它沒有返回!這不應該是一樣的嗎?

回答

2

這裏的問題是response.xpath("//li")的一些節點在它們下面沒有任何a節點,所以你得到空的項目,因爲標題不在那裏。

你可以做的就是使用此XPath來代替:

items = response.xpath('//li[a//h2/text()]') 
len(items) 
# 1019 
titles = [i.xpath("a//h2/text()").extract_first() for i in items] 
len([t for t in titles if t]) 
# 1019 

正如你可以看到,現在每個項目節點的項目。

+0

謝謝,像魅力一樣工作:D – Mohib