2015-04-04 90 views
0

我是一名python初學者。最近我一直在試圖從當地中文網站上獲取一些數據。 我成功地將信息存儲爲一個矩陣(列表列表),c,但是當我將它寫入一個csv文件時,我得到了一些雜亂的東西。下面是代碼:在Python中將中文寫入csv文件的問題

from bs4 import BeautifulSoup 
import requests 
import pandas as pd 
import csv 
url = "http://wszw.hzs.mofcom.gov.cn/fecp/fem/corp/fem_cert_stat_view_list.jsp" 
r=requests.get(url) 
data= r.text 
soup = BeautifulSoup(data) 

table = soup.find_all('table')[3] 
rows = table.find_all('tr') 
dogData= 0 
c=[] 
for tr in rows: 
    cols = tr.find_all('td') 
    dogName =cols[0].get_text() 
    rank2013 = cols[1].get_text() 
    rank2012 =cols[2].get_text() 
    rank2008 =cols[3].get_text() 
    rank2003 =cols[4].get_text() 
    rank2004 =cols[5].get_text() 
    rank2005=cols[6].get_text() 
    temp=[dogName,rank2013,rank2012,rank2008,rank2003,rank2004,rank2005] 
    [x.encode('gb18030') for x in temp] 
    c.append(temp) 



with open("output.csv", "wt") as f: 
    writer = csv.writer(f) 
    writer.writerows(c) 

我使用Python 3.4 誰能告訴我出了什麼差錯,我怎麼能提高代碼?非常感謝! Marco

+0

究竟是什麼[x.encode(「GB18030 ')for x in temp]在做什麼?這是列表理解,但它沒有分配給變量。基本上這行代碼什麼都不做,因爲你沒有把它傳遞給一個變量來存儲。 – reticentroot 2015-04-04 03:54:06

回答

0

我還沒有運行你的代碼,但我確實發現了一些奇怪的東西。 您鍵入

temp=[dogName,rank2013,rank2012,rank2008,rank2003,rank2004,rank2005] 
[x.encode('gb18030') for x in temp] 
c.append(temp) 

然而​​沒有做任何事情。現在,你寫的代碼是一樣的:

temp=[dogName,rank2013,rank2012,rank2008,rank2003,rank2004,rank2005] 
c.append(temp) 

如果您想使用列表理解你使用它的方式:

temp=[dogName,rank2013,rank2012,rank2008,rank2003,rank2004,rank2005] 
modified_temp = [x.encode('gb18030') for x in temp] 
c.append(modified_temp) 
+0

你好msanti,你說得對,這裏有一個錯誤。我根據您的建議更改了代碼,但現在我正在獲取csv文件中的原始gb18030代碼。我真正想要的是在csv文件中打印出中文字符。無論如何要這樣做?我在網上搜索,他們建議使用模塊編解碼器,但我不知道如何實現這一點。你能給我一些建議嗎?謝謝 – Marco 2015-04-04 15:53:27

+0

你可能想做一些研究。問題在於你如何編碼數據。這裏是一個建議鏈接來研究http://stackoverflow.com/questions/14174260/reading-chinese-characters-in-a-file-and-sending-them-to-a-browser,或者你可能想找到一個處理中文字符的API – reticentroot 2015-04-04 16:41:12

+0

謝謝!我已經知道了。現在,作爲列表而不是輸出,我寫作元素,它工作正常。我感謝您的幫助。 – Marco 2015-04-05 12:24:40