2011-06-26 14 views
2

私のコードにある種類のItem Exporterを実装しようとしています。私の基本的なコードは、例のように打撃平均をsi.comで削っているところです。結果は1つの長い行に表示されています。代わりに.csvファイルに格納されている出力を変更して、列に配置したいと考えています。下に私はスパイダーを含めて、私が使用しているアイテムの輸出業者はちょうど基本的なものを見つけただけですhere.私は実際に起こったかったことは、各アイテムを取って、長い列の代わりに、 3つの結果はすべて連続しています。ScrapでItemExporterを使用しようとしています

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コーディングでまだ非常に新しいので、治療のドキュメントはあまり役に立ちません。コードを実行しようとすると、 "ImportError:オブジェクト 'mlb1.pipelines.XmlExportPipeline'の読み込み中にエラーが発生しました:名前のシグナルをインポートできません。誰でも助けることができれば幸いです。

答えて

2

--set FEED_URI=items.csv --set FEED_FORMAT=csvを使用して、プレイヤー名scrapyコマンドラインで

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() 

を抽出するため、この例を参照してください。これにより、あなたの名前がファイルitems.csvにダンプされます。あなたの飼料輸出業者を書く必要はありません。あなたは同様の行にチーム名のxpathをモデル化することができます

+0

素晴らしい、ありがとう。私はもう少し時間がかかっていて、書き込んだクイックコンバータを読み込んでいましたが、これは素晴らしいプログラムです。私も探しています。異なるサイトには異なるフォーマットがあるため、両方のサイトを自由に使い分けることができます。あなたの助けに感謝します。 – Jeff

+0

@Jeff、あなたは大歓迎です。アイテムのサイズが大きくなるにつれて、これらのアイテムをcsvではなくsqlite dbに書き込むことを検討することができます。クラッシュがあり、csvファイルが書き込まれていない場合にも便利です – Medorator

関連する問題