【问题标题】:python's encoding differencepython的编码差异
【发布时间】:2015-12-28 15:54:13
【问题描述】:
# 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 文件充满了非字符的东西。是什么造成了这种差异? print 也得到不同的结果,但为什么呢? (一定是我对编码知之甚少的问题)

【问题讨论】:

    标签: python encoding


    【解决方案1】:

    首先,writerow 接口需要一个类似列表的对象,所以第一个 sn-p 对这个接口是正确的。但是在您的第二个 sn-p 中,该方法假设您作为参数传递的字符串是一个列表 - 并对其进行迭代 - 这可能不是您想要的。您可以尝试writerow([temp]) 并查看它应该与第一种情况的输出相匹配。

    其次,我想警告你,Python csv 模块是 notorious for headaches with unicode,基本上它是不支持的。如果您需要支持 unicode,请尝试使用 unicodecsv 作为 csv 模块的替代品。然后你不需要在将它们写入文件之前对字符串进行编码,你只需直接编写 unicode 对象并让库处理编码。

    【讨论】:

    • 你说得对,它正在工作,谢谢!我应该对预期的对象保持谨慎。谢谢你的提示(像我这样的新手会在没有你的提示的情况下永远使用 csv 模块)unicodecsv!
    猜你喜欢
    • 1970-01-01
    • 2020-08-26
    • 2016-09-08
    • 2013-07-07
    • 2019-05-31
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多