# 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)
然后第一个方法
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文件充满了非角色的东西。这有什么不同?打印也有不同的结果,但为什么? (一定是问题,因为我对编码知之甚少)
答案 0 :(得分:3)
首先,writerow
接口期待类似列表的对象,因此第一个代码段对于此接口是正确的。但是在你的第二个片段中,该方法假设你作为参数传递的字符串是一个列表 - 并且这样迭代 - 这可能不是你想要的。您可以尝试writerow([temp])
并查看它应与第一种情况的输出相匹配。
其次,我想警告你,Python csv
模块是notorious for headaches with unicode,基本上它是未经过调整的。如果需要支持unicode,请尝试使用unicodecsv
作为csv模块的替代品。然后,在将字符串写入文件之前,您不需要对字符串进行编码,您只需直接编写unicode对象并让库处理编码。