2017-05-06 109 views
0

有我的Code.When我抓取其他网址时,这是没有问题的,但是当我抓取此url.it问我列不匹配。我不知道为什么计数长度是字符长度,而不是字典长度?python scrapy xpath:InternalError:(1136,u“列计数与第1行的值计数不匹配”)

class JikespiderSpider(scrapy.Spider): 
    name = "jikespider" 
    allowed_domains = ["fromgeek.com"] 
    start_urls = ['http://www.fromgeek.com/topic/'] 

    def parse(self, response): 
    sel = Selector(response) 
    jike_list = sel.xpath('//ul[@id="masonry0"]') 
    ll = len(sel.xpath('//ul[@id="masonry0"]/li')) 
    for jike in range(ll): 
     item = JikeItem() 
     try: 
      item['jike_title'] = jike_list.xpath('//li/div/div[@class="n-pic fl"]/a/@title').extract()[jike].strip() 
      item['jike_uptime'] = jike_list.xpath('//li/div/div[@class="n-keytime "]/div[@class="time fr"]/text()').extract()[jike].strip() 
      item['jike_tag'] = jike_list.xpath('//li/div/div[@class="n-keytime "]/div[@class="key fl"]').xpath('string(.)').extract()[jike].strip() 
      print len(item['jike_title']) 
      print len(item['jike_uptime']) 
      print len(item['jike_tag']) 
      print '--------------------------' 
      yield item 
     except Exception,e: 
      print e 
+0

请显示您的'items.py',并且如果您将抓取的项目存储到'db'中,然后'管道'代码中,因为项目被刮取,但是在处理获取的项目期间发生问题。 – JkShaw

回答

0

我无法用代码重现您的错误消息。 (scrapy 1.3.2Python 2.7.11)。

我想知道为什么你不循环selector list但建立一个计数器访问元素。嵌套的XPath查询更容易。

class JikespiderSpider(scrapy.Spider): 
    name = "jikespider" 
    allowed_domains = ["fromgeek.com"] 
    start_urls = ['http://www.fromgeek.com/topic/'] 

    def parse(self, response): 

     sel_jike_list = response.xpath('//ul[@id="masonry0"]/li') 
     for sel_jike in sel_jike_list: 
      item = JikeItem() 
      item['jike_title'] = sel_jike.xpath('.//div[@class="n-pic fl"]/a/@title').extract_first() 
      # ... other fields 
      yield item 

请注意嵌套XPath开头处的点。

相关问题