2015-12-28 67 views
2
# my scraper script file 
#-*- coding: utf-8 -*- 
from selenium import webdriver 
import csv 

browser = webdriver.Firefox() 
browser.get("http://web.com") 

f = open("result.csv", 'w') 
writer = csv.writer(f) 

那麼第一種方法python的編碼差異

element = browser.find_element_by_xpath("xpath_addr") 
temp = [element.get_attribute("innerHTML").encode("utf-8")] 
print temp    # ['\xec\x84\something\xa8'] 
writer.writerow(temp) 

這導致右CSV文件,我的語言(如한글)

但第二種情況下,我認爲這只是一個小不同

element = browser.find_element_by_xpath("xpath_addr") 
temp = element.get_attribute("innerHTML").encode("utf-8") 
print temp    # "한글" 
writer.writerow(temp) 

那麼csv文件充滿了非字符的東西。是什麼使這種差異?打印也得到不同的結果,但爲什麼? (這一定是問題,因爲我對編碼知之甚少)

回答

3

首先,writerow接口期望一個類似列表的對象,所以第一個片段對於這個接口是正確的。但在第二個片段中,該方法假定您作爲參數傳遞的字符串是一個列表 - 並且按照這種方式進行迭代 - 這可能不是您想要的。您可以嘗試writerow([temp])並查看它應該匹配第一種情況的輸出。

其次,我想警告你,Python csv模塊是notorious for headaches with unicode,基本上它是unsupoorted。如果您需要支持unicode,請嘗試使用unicodecsv作爲csv模塊的直接替代品。然後,在將它們寫入文件之前,您不需要對它們進行編碼,只需直接寫入unicode對象並讓庫處理編碼即可。

+0

你是對的,它的工作,謝謝!我應該對預期的目標持謹慎態度。謝謝你的提示(像我這樣的新手會永遠使用csv模塊沒有你的提示)unicodecsv也! –