python selenium 编码问题

摘要:
UTF-8是Unicode传播和存储最流行的编码方法。在大多数情况下,当我们编写python 2程序时,我们习惯于在程序的第一行添加:#coding=utf-8。事实上,这里的编码文件很容易解决。Python程序运行时环境的代码执行以下程序。Python程序读取外部文件和网页的代码#。目前还找不到合适的例子。查看Python系统代码。查看Python 2或Python 3的系统代码。Importsysreloadsys.setdefaultencoding因此,当您在程序执行过程中遇到以下错误消息时。
#coding=utf-8
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

# 返回百度页面底部备案信息
text = driver.find_element_by_id("cp").text
print(text)

driver.close()

认识常见编码

  GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码

  GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名

  cp936:中文本地系统是Windows中的cmd,默认codepage是CP936,cp936就是指系统里第936号编码格式,即GB2312的编码。

    (当然有其它编码格式:cp950 繁体中文、cp932 日语、cp1250 中欧语言。。。)

  Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

  UTF-8 (8-bit Unicode Transformation Format)是最流行的一种对 Unicode 进行传播和存储的编码方式。它用不同的 bytes 来表示每一个代码点。ASCII 字符每个只需要用一个 byte ,与 ASCII 的编码是一样的。所以说 ASCII 是 UTF-8 的一个子集。

在开发Python程序的过程中,会涉及到三个方面的编码:

  • Python程序文件的编码
  • Python程序运行时环境(IDE)的编码
  • Python程序读取外部文件、网页的编码

Python程序文件的编码

例如:

Python2自带的IDE,当创建了一个文件保存的时候提示:

python selenium 编码问题第1张

  这是因为Python2编辑器默认的编码是ASCII,它是无法识别中文的,所以会弹出这样的提示。这也是我们在大多情况下写python2程序的时候习惯在程序的第一行加上:#coding=utf-8

  其实,这里的编码文件是很容易解决的。

Python程序运行时环境(IDE)的编码

  

执行下面的一段程序。

复制代码
#coding=utf-8
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

# 返回百度页面底部备案信息
text = driver.find_element_by_id("cp").text
print(text)

driver.close()
复制代码

在windows cmd下执行:

python selenium 编码问题第4张

我们要获取的信息是:

©2015 Baidu 使用百度前必读 意见反馈 京ICP证030173号

  Windows cmd 用的是cp936,也就是中文的GB2312,在GBK的字符集里没有“©”,这就导致通过GBK解析的时候出现编码问题。

  这就像你在翻译英文的时候,出现了一个单词,这个单词你查遍了牛津大词典都没找到对应的含义解释,那么自然是会有问题的。

  那假设,我还就想在cmd下执行这个python程序了,那么可以去修改cmd的默认编码类型为utf-8,对应的编码为CHCP 65001(utf-8)。在cmd 下输入:chcp 65001 命令回车。

python selenium 编码问题第5张

然后,修改cmd的字体为“Lucida Console”,再来执行程序就可以被正确输出了。

python selenium 编码问题第6张

Python程序读取外部文件、网页的编码

#这一块,暂时没有找到合适的例子

查看Python系统编码

查看Python2 或Python3的系统编码。

Python2:

Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'

Python3:

复制代码
Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:27:37) [MSC v.1900 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
复制代码

那么如何修改Python2的系统编码为urf-8呢?

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

所以,在你的程序执行的过程中,遇到下面的报错信息时。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1....

可以将上面的三行代码加到Python程序的头部。

decode()与encode()

  • decode 的作用是将其他编码的字符串转换成 Unicode 编码,eg name.decode(“GB2312”),表示将GB2312编码的字符串name转换成Unicode编码。
  • encode 的作用是将Unicode编码转换成其他编码的字符串,eg name.encode(”GB2312“),表示将GB2312编码的字符串name转换成GB2312编码。

  例如,前面获取百度底部信息的例子。我还可以通过decode()与encode()来解决:

复制代码
#coding=utf-8
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# 返回百度页面底部备案信息
text = driver.find_element_by_id("cp").text
text2 = text.encode("gbk","ignore").decode("gbk")
print(text2)
复制代码

   这里通过encode()将Unicode编码转换成gbk编码,在转换的过程中通过“ignore”忽略掉gbk不能识别的字符(©),然后再把gbk转换成Unicode编码。当然,这并不是一种完美的方式,毕竟牺牲部分字符串。

chardet模块

 chardet是一个非常优秀的编码识别模块。

通过pip 安装:

>pip install chardet

 使用:

复制代码
>>> from chardet import detect

>>> a = "中文"

>>> detect(a)
{'confidence': 0.682639754276994, 'encoding': 'KOI8-R'}
复制代码

 大概有68%的把握为KOI8-R编码类型。

免责声明:文章转载自《python selenium 编码问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python网编_进程之开启一个进程kitti数据集介绍下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python 判断当前时间是否在一个时间范围内

一、概述 最近在数据分析,需要判断当前时间是否为上班时间:9:00~18:00 二、代码实现 import datetime # 范围时间 d_time = datetime.datetime.strptime(str(datetime.datetime.now().date()) + '9:00', '%Y-%m-%d%H:%M') d_time1...

PostgreSQL 字符串操作函数 迎客

函数:string || string 说明:String concatenation 字符串连接操作例子:'Post' || 'greSQL' = PostgreSQL 函数:string || non-string or non-string || string说明:String concatenation with one non-string i...

jenkins部署python语言webUI自动化项目

前置条件:我使用的系统是ubuntu20.04,linux系统,使用的war包本地安装jenkins 本地PyCharm运行WebUI项目 下载项目代码 git clone https://gitee.com/iread9527/iSelenium_Python.git 使用pycharm打开项目,本地安装selenium以及项目依赖的第三方库...

利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)

  在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析。本部分关注可以聚合、合并、重塑数据的方法。 1、层次化索引   层次化索引(hierarchical indexing)是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使你能以低纬度形式处理高纬度数据。我们来看一个简单的栗子:创建一个Ser...

Python参考资料大全

Python参考资料 1.  基本安装 http://www.python.org/ 官方标准Python开发包和支持环境,同时也是Python的官方网站; http://www.activestate.com/ 集成多个有用插件的强大非官方版本,特别是针对Windows环境有不少改进; 2.  Python文档 学习资料: Pytho...

ffmpeg参数说明(转载)

ffmpeg.exe -i F:\闪客之家\闪客之歌.mp3 -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\11.flv ffmpeg -i F:\01.wmv -ab 56 -ar 22050 -b 500 -r 15 -s 320x240 f:\test.flv 使用-ss参数 作用(time_off set...