2017-05-06 11 views
-1

私はスクラップを使用して在庫プレマーケットデータをスクラップしています。ここでは、ウェブサイトをこすりするために使用されているコードは次のとおりです。CSVのインチとフロートの文字列を個々の文字と浮動小数点数に変換

def parse(self, response): 
    for sel in response.xpath('//body'): 
     item = PremarketItem() 
     item['volume'] = sel.xpath('//td[@class="tdVolume"]/text()').extract() 
     item['last_price'] = sel.xpath('//div[@class="lastPrice"]/text()')[:30].extract() 
     item['percent_change'] = sel.xpath(
     '//div[@class="chgUp"]/text()')[:15].extract() + sel.xpath('//div[@class="chgDown"]/text()')[:15].extract() 
     item['ticker'] = sel.xpath('//a[@class="symbol"]/text()')[:30].extract() 
     yield item 

.csvファイルに次のコードの出力は、この線に沿って何かである:あなたが見ることができるように

ticker,percent_change,last_price,volume 
"HTGM,SNCR,SAEX,IMMU,OLED,DAIO","27.43%,20.39%,17.28%,17.19%,15.69%","5,298350,700,1090000,76320,27190,13010",etc 

、値は正しく区切られていますが、すべてが大量の文字列に詰まっています。私は複数のループを試しましたが、何も動いていませんでした。何も見つかりませんでした。お手伝いありがとう!

答えて

0

大量の文字列を分割する代わりに、値が最初に分離されるように治療コードを修正することができます。

あなたのアイテムXPathsは、あなたの仕様に合ったすべての要素を選択してから、1つの(巨大な)アイテムのすべての要素を出力することから始まります。私は、あなたのターゲットのウェブサイトは、ターゲットアイテムに関するいくつかの構造を持っていると思います。テーブルの行。

次に、行に一致し、行ごとに1つの項目を解析するためにそれらの行にループするXPath式を把握する必要があります。次の疑似コードを参照してください。

def parse(self, response): 

    # Loop over table rows ... 
    for sel in response.xpath('//table/tr'): 

     item = PremarketItem() 
     # Use XPath starting in table row: Use dot at beginning 
     item['volume'] = sel.xpath('./td[@class="tdVolume"]/text()').extract() 
     # ... other fields ... 
     yield item 

相対XPath式の例については、scrapy documentationを参照してください。

関連する問題