Sib*_*ain 4 web-crawler scrapy web-scraping python-2.7
我正在从以下 URL 抓取数据: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
Run Code Online (Sandbox Code Playgroud)
我想知道这段代码是否可以正常工作,或者应该采取什么正确的方法来做到这一点?
它应该工作得很好。您可以parse
根据需要从回调中生成任意数量的项目。只是一些注意事项:
在第二种情况下,最好创建一个新项目然后重用旧项目。因为您永远不知道旧项目引用发生了什么。也许您正在覆盖并丢失以前的数据。
您可以为两个案例创建不同的项目类型。并在管道中区别对待它们。