我正在从以下网址抓取数据:
http://www.indexmundi.com/commodities/?commodity=gasoline
有两个部分包含价格:墨西哥湾沿岸汽油期货结束日结算价和汽油每日价格
我想将这两个部分的数据作为两个不同的项目。这是我写的代码:
if dailyPrice:
item['description'] = u''.join(dailyPrice.xpath(".//h1/text()").extract())
item['price'] = u''.join(dailyPrice.xpath(".//span/text()").extract())
item['unit'] = dailyPrice.xpath(".//div/p/text()").extract()[0].split(',')[-1]
regex = re.compile("Source:(.*)",re.IGNORECASE|re.UNICODE)
result = re.search(regex, u''.join(dailyPrice.xpath(".//div/p/text()").extract()))
if result:
item['source'] = result.group(1).strip()
yield item
if futurePrice:
item['description'] = u''.join(futurePrice.xpath(".//h1/text()").extract())
item['price'] = u''.join(futurePrice.xpath(".//span/text()").extract())
item['unit'] = u''.join(futurePrice.xpath(".//div[2]/table//tr[1]/td/text()").extract())
source = futurePrice.xpath(".//div[2]/table//tr[4]/td/a/text()").extract()
if source:
item['source'] = u' - '.join(source)
else:
item['source'] = ''
yield item
我想知道这段代码是否能正常工作或者应该采用哪种方法来正确执行此操作?
答案 0 :(得分:4)
它应该工作得很好。您可以根据需要从parse
回调中生成任意数量的项目。只是一些注意事项:
在第二种情况下,最好创建一个新项目,然后重新使用旧项目。因为你永远不知道旧项目参考发生了什么。也许你正在覆盖并丢失以前的数据。
您可以为两种情况创建不同的项类型。在管道中对待它们的方式不同。