前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 编码转换与中文处理

Python 编码转换与中文处理

作者头像
py3study
发布于 2020-01-06 15:14:32
发布于 2020-01-06 15:14:32
91700
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

Python 编码转换与中文处理

python 中的 unicode是让人很困惑、比较难以理解的问题. utf-8是unicode的一种实现方式,unicode、gbk、gb2312是编码字符集.

decode是将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象

写python时遇到的中文编码问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/test sudo vim test.py
#!/usr/bin/python
#-*- coding:utf-8 -*-
def weather():
        import time
        import re
        import urllib2
        import itchat
        #模拟浏览器
        hearders = "User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
        url = "https://tianqi.moji.com/weather/china/guangdong/shantou"    ##要爬去天气预报的网址
        par = '(<meta name="description" content=")(.*?)(">)'    ##正则匹配,匹配出网页内要的内容
        ##创建opener对象并设置为全局对象
        opener = urllib2.build_opener()
        opener.addheaders = [hearders]
        urllib2.install_opener(opener)
        ##获取网页
        html = urllib2.urlopen(url).read().decode("utf-8")
        ##提取需要爬取的内容
        data = re.search(par,html).group(2)
        print type(data)
        data.encode('gb2312')
        b = '天气预报'
        print type(b)
        c = b + '\n' + data
        print c
weather()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/test sudo python test.py
<type 'unicode'>
<type 'str'>
Traceback (most recent call last):
  File "test.py", line 30, in <module>
    weather()
  File "test.py", line 28, in weather
    c = b + '\n' + data
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

解决方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/test sudo vim test.py
#!/usr/bin/python
#-*- coding:utf-8 -*-
import sys
reload(sys)
# Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
sys.setdefaultencoding('utf-8')
def weather():
        import time
        import re
        import urllib2
        import itchat
        #模拟浏览器
        hearders = "User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
        url = "https://tianqi.moji.com/weather/china/guangdong/shantou"    ##要爬去天气预报的网址
        par = '(<meta name="description" content=")(.*?)(">)'    ##正则匹配,匹配出网页内要的内容
        ##创建opener对象并设置为全局对象
        opener = urllib2.build_opener()
        opener.addheaders = [hearders]
        urllib2.install_opener(opener)
        ##获取网页
        html = urllib2.urlopen(url).read().decode("utf-8")
        ##提取需要爬取的内容
        data = re.search(par,html).group(2)
        print type(data)
        data.encode('gb2312')
        b = '天气预报'
        print type(b)
        c = b + '\n' + data
        print c
weather()

测试后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/test sudo python test.py
<type 'unicode'>
<type 'str'>

个人感觉网上说中文乱码通用解决办法都是错误的,因为类型不一样解决方法也不一样,所以最近刚好出现了这种问题,从网上找了很多办法没解决到,最后自己去查看资料,才发现需要对症下药。

这是一个抓取网页代码的python脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/test sudo cat file.py
#!/usr/bin/python
#_*_ coding:UTF-8 _*_
import urllib,urllib2
import re
url = 'http://sports.sohu.com/nba.shtml' #抓取的url
par = '20180125.*\">(.*?)</a></li>'
req = urllib2.Request(url)
response = urllib2.urlopen(req).read()
#response = unicode(response,'GBK').encode('UTF-8')
print type(response)
print response

遇到的问题:

使用中文抓取中文网页时,print出来的中文会出现乱码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/test sudo python file.py
special.wait({
itemspaceid : 99999,
form:"bigView",
adsrc : 200,
order : 1,
max_turn : 1,
spec :{
onBeforeRender: function(){
},
onAfterRender: function(){
},
isCloseBtn:true//�Ƿ��йرհ�ť
}
});

解决方法:

查看网页源代码发现charset=GBK的类型所以python中要进行类型转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/test sudo cat file.py
#!/usr/bin/python
#_*_ coding:UTF-8 _*_
import urllib,urllib2
import re
url = 'http://sports.sohu.com/nba.shtml' #抓取的url
par = '20180125.*\">(.*?)</a></li>'
req = urllib2.Request(url)
response = urllib2.urlopen(req).read()
response = unicode(response,'GBK').encode('UTF-8')
print type(response)
print response
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/test sudo python file.py
special.wait({
itemspaceid : 99999,
form:"bigView",
adsrc : 200,
order : 1,
max_turn : 1,
spec :{
onBeforeRender: function(){
},
onAfterRender: function(){
},
isCloseBtn:true//是否有关闭按钮
}
});

现在已经把中文乱码解决了

import json

#打印字典

dict = {'name': '张三'}

print json.dumps(dict, encoding="UTF-8", ensure_ascii=False) >>>{'name': '张三'}

#打印列表

list = [{'name': '张三'}]

print json.dumps(list, encoding="UTF-8", ensure_ascii=False) >>>[{'name': '张三'}]

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python爬取nba今天的信息
最近无聊在写python爬虫,分享一个爬去nba今天信息的python脚本,可能没写的美观,有优化的请大神指点!
py3study
2020/01/15
5760
利用Python脚本爬取字体文件
为了提高验证码的识别准确率,我们当然要首先得到足够多的测试数据。验证码下载下来容易,但是需要人脑手工识别着实让人受不了,于是我就想了个折衷的办法------自己造验证码。
mythsman
2022/11/14
6130
自学Python十一 Python爬虫总结
  通过几天的学习与尝试逐渐对python爬虫有了一些小小的心得,我们渐渐发现他们有很多共性,总是要去获取一系列的链接,读取网页代码,获取所需内容然后重复上面的工作,当自己运用的越来越熟练之后我们就会尝试着去总结一下爬虫的共性,试着去写个helper类以避免重复性劳动。
叁金
2018/09/04
9390
Python入门网络爬虫之精华版
首先列举一下本人总结的相关文章,这些覆盖了入门网络爬虫需要的基本概念和技巧:宁哥的小站-网络爬虫
IT派
2018/08/10
1.2K0
python爬虫(六)_urllib2:handle处理器和自定义opener
本文将介绍handler处理器和自定义opener,更多内容请参考:python学习指南 opener和handleer 我们之前一直使用的是urllib2.urlopen(url)这种形式来打开网页,它是一个特殊的opener(也就是模块帮我们建好的),opener是urllib2.OpenerDirectory的实例。 但是基本的urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。所以要支持这些功能: 使用相关的Handler处理器来创建特定功能的处理器对象;
用户1174963
2018/01/17
1.1K0
python爬虫(六)_urllib2:handle处理器和自定义opener
Python 中的 urllib2 模块
    urlopen(url, data=None) -- Basic usage is the same as original     urllib.  pass the url and optionally data to post to an HTTP URL, and     get a file-like object back.  One difference is that you can also pass     a Request instance instead of URL.  Raises a URLError (subclass of     IOError); for HTTP errors, raises an HTTPError, which can also be     treated as a valid response.
py3study
2020/01/12
2.9K0
Python 学习入门(6)—— 网页爬虫
Python抓取网页方法,任务是批量下载网站上的文件。对于一个刚刚入门python的人来说,在很多细节上都有需要注意的地方,以下就分享一下在初学python过程中遇到的问题及解决方法。
阳光岛主
2019/02/19
2.2K0
Python 学习入门(6)—— 网页爬虫
Python爬虫准备:认识urllib/urllib2与requests
首先说明一下我的爬虫环境是基于py2.x的, 为什么用这个版本呢,因为py2.x的版本支持的多,而且一般会使用py2.x环境,基本在py3.x也没有太大问题,好了,进入正题!
龙哥
2018/10/22
4890
爬虫0020:urllib2操作urllib2的使用
至此,我们可以描述爬虫程序,就是用来根据一定的规则采集获取网络中的数据的! 整个采集过程主要步骤如下:
大牧莫邪
2018/08/27
7480
网络爬虫有什么用?怎么爬?手把手教你爬网页(Python代码)
导读:本文主要分为两个部分:一部分是网络爬虫的概述,帮助大家详细了解网络爬虫;另一部分是HTTP请求的Python实现,帮助大家了解Python中实现HTTP请求的各种方式,以便具备编写HTTP网络程序的能力。
IT阅读排行榜
2019/05/09
2.7K0
网络爬虫有什么用?怎么爬?手把手教你爬网页(Python代码)
Python实现论坛自动签到
[文件] DakeleSign.py ~ 4KB #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'poppy' ''' dakele bbs sigin ''' import sys import urllib2 import urllib import requests import cookielib import json from pyquery import PyQuery as pq import logging loggi
一墨编程学习
2019/08/20
2K0
Python urllib2 发送HTT
urllib2 是Python自带的标准模块, 用来发送HTTP Request的。  类似于 .NET中的,  HttpWebRequest类
py3study
2020/01/15
5210
Python网络爬虫(三)- 爬虫进阶1.爬虫进阶cookielib2.具体代码操作
注解:这里使用urllib2.HTTPHandler()访问https网页得到的html代码。
Python攻城狮
2018/08/23
7340
Python网络爬虫(三)- 爬虫进阶1.爬虫进阶cookielib2.具体代码操作
VII Python(7)爬虫
urllib和urllib2模块(python2.*分urllib和urllib2;python3..4.1中把urllib和urllib2合并统一为一个包package,注意版本3是包不是模块);
py3study
2020/01/07
4430
python 2.7 下urllib2 常见用法总结
urllib2做为python下,在httplib之上再次封装的强大html协议实现,应用非常广泛。
黯然销魂掌
2018/09/27
2.6K0
Python爬虫这么久了,它们三兄弟终于搞清楚了(干货)
在可供使用的网络库中,urllib和urllib2可能是投入产出比最高的两个,是Python中操作url的官方标准库。它们让你能够通过网络访问文件,就像这些文件位于你的计算机中一样。只需一个简单的函数调用,就几乎可将统一资源定位符(URL)可指向的任何动作作为程序的输入。结合re模块使用将发挥强大威力!
Python知识大全
2020/02/13
9010
Python爬虫这么久了,它们三兄弟终于搞清楚了(干货)
用python获取天气数据,并作定时播报
思路 1.调用和风天气的API,获取天气数据 2.用百度语音API,将天气数据合成语音 3.用树莓派每天早上定时播报天气(定时任务crontab + Python脚本 + mpg123播放器) Pyt
机器学习AI算法工程
2018/03/14
2.7K0
用python获取天气数据,并作定时播报
Python模拟登录的几种方法
  简单地说,cookie保存在发起请求的客户端中,服务器利用cookie来区分不同的客户端。因为http是一种无状态的连接,当服务器一下子收到好几个请求时,是无法判断出哪些请求是同一个客户端发起的。而“访问登录后才能看到的页面”这一行为,恰恰需要客户端向服务器证明:“我是刚才登录过的那个客户端”。于是就需要cookie来标识客户端的身份,以存储它的信息(如登录状态)。
菲宇
2019/06/13
4.3K0
Python模拟登录的几种方法
Python 编码转换与中文处理
python 中的 unicode是让人很困惑、比较难以理解的问题. 这篇文章 写的比较好,utf-8是 unicode的一种实现方式,unicode、gbk、gb2312是编码字符集.
bear_fish
2018/09/19
3.6K0
python通过生成cookie文件,并
今天有个需求需要通过cookie访问内部cmdb,获取机器等信息。上网搜罗了一下用法。记录一下
py3study
2020/01/10
7620
相关推荐
python爬取nba今天的信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验