我正在尝试在我的代码中实现某种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':无法导入名称信号”。任何人都可以提供的帮助将不胜感激。
答案 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