python的编码差异

2024-04-26 05:12:57 发布

您现在位置:Python中文网/ 问答频道 /正文

# 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文件充满了非字符的东西。这有什么区别?打印也会得到不同的结果,但为什么呢(这一定是问题所在,因为我对编码知之甚少)


Tags: csvimportbrowsergetbyattributeelementfind
1条回答
网友
1楼 · 发布于 2024-04-26 05:12:57

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

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

相关问题 更多 >