2017-02-15 77 views
2

我Python中的初學者,我試圖從網上提取數據,並在表中顯示它:writerow在CSV文件問題

# import libraries 
import urllib2 
from bs4 import BeautifulSoup 
import csv 
from datetime import datetime 

quote_page = 'http://www.bloomberg.com/quote/SPX:IND' 
page = urllib2.urlopen(quote_page) 
soup = BeautifulSoup(page, 'html.parser') 
name_box = soup.find('h1', attrs={'class': 'name'}) 
name = name_box.text.strip() 
print name 
price_box = soup.find('div', attrs={'class':'price'}) 
price = price_box.text 
print price 

with open('index.csv', 'a') as csv_file: 
    writer = csv.writer(csv_file) 
    writer.writerow([name, price, datetime.now()]) 

這是提取數據非常基本的代碼來自bloomberg並將其顯示在csv文件中。 它應該在列中顯示名稱,在另一箇中顯示價格,在第三個中顯示日期。 但實際上它複製了第一行中的所有數據:Result of the index.csv file

我是否錯過了我的代碼?

謝謝你的幫助!

+0

您的CSV確實有三列到底是什麼。問題? – e4c5

+0

它看起來像CSV文件是完美的(就是說,用Python代碼做得很好!)。然而問題在於你是否將它導入到電子表格程序中。你這樣做? – jas

+0

問題在於Excel不允許每個文件都有列,因爲我沒有使用文本導入嚮導。 現在我的問題是由Joseph Bywater描述的問題。 – VI55

回答

0

Wikipedia:

在計算中,逗號分隔值(CSV)文件存儲在純文本表格數據(數字和文本)。文件的每一行都是數據記錄。每條記錄包含一個或多個以逗號分隔的字段。使用逗號作爲字段分隔符是此文件格式名稱的來源。

該問題與您的Python代碼無關!您的腳本實際上是將純文本文件與由逗號分隔的字段一起寫入。這是您的csv文件查看器,不會將逗號作爲分隔符。您應該檢查您的csv文件查看器的首選項。

+0

我正在使用Excel,我用你寶貴的幫助解決了我的問題! 對於任何未來的讀者: 轉到數據並選擇文本到數據工具下的列,然後選擇分隔符,然後點擊。然後選擇逗號作爲分隔符並點擊結束。 – VI55

0

它看起來像是當您將CSV導入到Excel中時,它沒有被正確解釋。當我將它導入到Excel中時,我注意到「2,337.58」中的逗號將CSV數據搞亂,將337.58「放入它自己的列中。當您將數據導入到excel時,您應該看到一個彈出窗口。會問如何將數據表示您應該選擇限定選項,然後選擇分隔符:逗號最後,單擊Finish

Importing CSV

enter image description here

+0

謝謝您的詳細解答。 有沒有辦法解決「」2,337.58「問題? – VI55

+1

@ VI55:在導入嚮導的步驟2中,是否將文本限定符設置爲雙引號('」')? Joseph Bywater在第二欄中遇到困難的原因是該欄以空格開頭而不是引用。 '標準普爾500指數,「2,337.58」,2017-02-15 14:02:55.217830'應該是標準普爾500指數,「2337.58」,2017-02-15 14:02:55.217830'。當引號不是字段中的第一個字符時,它不被視爲帶引號的字段。 (引用可以使數據中的分隔符不被視爲分隔符。) –

+1

@ VI55:從您張貼Excel導入結果的圖像中,我認爲您的數據中可能沒有額外的空間因爲它不在圖像中。更有可能您沒有將文本限定符設置爲雙引號。 –