Scrapy:在剪切页面中为选项选择创建多个项目

时间:2012-10-31 12:52:34

标签: python scrapy

所以,我有一个蜘蛛爬行页面,收集它遇到的每个项目的数据。如果该项目没有选项,它只是将项目沿管道发送。如果有选项,它会组合一个选项列表列表,并为每个唯一的选项组合发送请求(返回为HTML片段,因此我将其视为XML)。对于每个选项组合,它会提取项目的价格并将其发送到管道下方。只是,它没有。

以下是一些代码:

#spider code above here that does all the normal stuff, 
#plus gets and organize all options.  Then this:

for optLists in uberList:
  queryString = '?func=Options&currentOption=1&Modal=False&AddUniqueID=False&sku=' + sku + '&option1=' + optLists[0] + '&option2=' + optLists[1] + '&option3=' + optLists[2]
  reqURL = urljoin(baseAjaxURL, queryString)
  req = Request(url=reqURL,
                callback=self.parse_ajax,
                meta = {'item' : item},
               )
  self.log('simplified item: ' + reqURL, level=log.DEBUG)
  yield req

回调函数:

def parse_ajax(self, response):
  print 'parsing ajax'
  xxs = XmlXPathSelector(response)
  item = response.meta['item']
  item['price'] = xxs.select("normalize-space(substring-before(substring-after(.//skuMainPrice/text(), 'ppPrice:'),'/span'))").extract()[0]
  print 'parse_ajax price: ', item['price']
  return item

第一种方法中的for循环正确触发,每组选项一次。如果回调是针对不存在的方法(这很好),则Request会抛出错误,但回调方法中的print语句永远不会触发,也不会将项目传播到管道中。

对于我做错了什么或如何正确行事的任何建议都将不胜感激。

由于

1 个答案:

答案 0 :(得分:0)

花了一些时间和一点点绝望,但我想出了这个。我正在为这个蜘蛛使用CrawlSpider,我不得不将ajax URL添加到'allow'规则中。没有它,该网址既不符合要求也不能解析。