试图在Scrapy中使用ItemExporter

时间:2011-06-26 14:53:47

标签: scrapy

我正在尝试在我的代码中实现某种Item Exporter。我的基本代码现在就是为了打击平均值而去sc.com,就像一个例子。结果显示在一个长行中,我想修改输出,因为它存储在.csv文件中,而不是将其放在列中。下面我包括蜘蛛,我正在使用的项目导出器只是找到的基本项here.我真正希望发生的是将每个项目存储在彼此相邻的列中,而不是一个长排,连续三个结果。

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.contrib.exporter import XmlItemExporter

from mlb1.items import MlbItem

class MLBSpider(BaseSpider):
   name = "si.com"
   allowed_domains = ["si.com"]
   start_urls = [
       http://sportsillustrated.cnn.com/baseball/mlb/stats/2011/batting/ml_0_byBATTING_AVG.html"
       ]

   def parse(self, response):
       hxs = HtmlXPathSelector(response)
       sites = hxs.select('//div[@class="cnnSASD_sport-mlb"]/div[@class="cnnSASD_page-leadersPlayersExpandedStats"]/div[@class="cnnStatsContent"]')
       items = []
       for site in sites:
           item = MlbItem()
           item['name'] = site.select('//table[@class="cnnSASD_first"]/*/td[@class="cnnCol1"]//text()').extract()
           item['team'] = site.select('//table[@class="cnnSASD_first"]/*/td[@class="cnnCol2"]//text()').extract()
           item['batave'] = site.select('//table[@class="cnnSASD_first"]/*/td[@class="cnnColHighlight"]//text()').extract()
           items.append(item)
       return items

我仍然是Python编码的新手,因此scrapy文档没有多大帮助。当我尝试运行代码时,出现错误,“ImportError:加载对象时出错'mlb1.pipelines.XmlExportPipeline':无法导入名称信号”。任何人都可以提供的帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

请参阅此示例以提取玩家名称

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    player_names = hxs.select('//table[@class="cnnSASD_first"]//td[@class="cnnCol1"]/a')
    for p_name in player_names:
        l = XPathItemLoader(item=MlbItem(), selector=p_name )
        l.add_xpath('name', 'text()')
        yield l.load_item()

在scrapy命令行中,使用--set FEED_URI=items.csv --set FEED_FORMAT=csv。这会将您的名称转储到items.csv文件。无需编写Feed导出器。您可以在类似的行上为团队名称建模xpath