您的位置:首页 > 编程语言 > Python开发

初学python学习的内容的记录

2016-06-27 14:39 441 查看
今天老师说要把自己学习的内容在微博中分享,觉得非常有道理。今天学习python,运用爬虫技术在网上进行信息检索,才发现字符串编码和解码的问题非常头疼。现在自己查了一些资料并且做了一些总结希望大神指点。

首先强调字符串编码和解码知识是每一个开发人员都应该无条件掌握的知识。

1、基础知识:

编码,简单来讲就是将自然语言转化成计算机语言;解码,就是相反

字符集:所有抽象字符的集合

字符编码:字符集与数学系统的对应关系

2、常用字符集和编码(包括ASCII . GB2312 . BIG5 . UNICODE等等):

2.1 常用字符集和编码

ASCII 主要用于显示现代英语开始是7位表示一个字符,后来扩展到8位表示一个字符。为什么是7位和8位,因为计算机的基本单位是Byte,一个Byte是8位

2.2 GBxxxxx字符集

主要原理是将>127后的字符取消,2字节个连连在一起表示汉子,

2.3 BIG5

繁体字,接触的少先不看,以后用到了再说

3、字符集的统一Unicode

各地都有各自的Unicode为了解决这个问题,Unicode诞生了。Unicode中有UTF-32/UTF-16/UTF-8

重点了解utf-8,有以下特性:

1、128个ASCII码只需要一个字节

2、带符号的拉丁文,等欧洲字符,用2个字节表示

3、其他各种,用三个字节表示

4、极少用的字符用4个字符表示

4、HTTP中字符和字符集相关的消息头

 Accept-Charset/Accept-Encoding/Accept-Language/Content-Type/Content-Encoding/Content-Language

accept表示接受的意思,content表示响应的意思

下面一段代码可以解释我今天遇到的问题姐解决方法:

1、错误代码实例,在这个代码中我遇到了字符问题,保存到文件中的代码是乱码:

import urllib2

from lxml import etree

page=open('tieba.txt','w')

request=urllib2.Request('http://tieba.baidu.com/f?ie=utf-8&kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&fr=search')

response=urllib2.urlopen(request)

rehtml=response.read()

html=etree.HTML(rehtml)

result=html.xpath('//li//@data-field')

print 'writing now!!!'

for i in range(1,len(result)):
page.write(result[i].encode('utf-8') )

page.close()                                                       #这段代码遇到了字符问题无法解决

2、改善后的代码

#coding=utf-8

import urllib2

from lxml import etree

import json

import chardet

page=open('tieba.json','w')

request=urllib2.Request('http://tieba.baidu.com/f?ie=utf-8&kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&fr=search')

response=urllib2.urlopen(request)

rehtml=response.read()

html=etree.HTML(rehtml)

result=html.xpath('//li[@data-field]/@data-field')

for i in range(1,3):
current = result[i]
#(1)str 转化成字符串
# 2)查看它的编码格式
print chardet.detect(str(result[i]))#得到结果{'confidence': 1.0, 'encoding': 'ascii'}
#因为有中文,而且原网站charset为utf-8
item = json.loads(current,encoding='utf-8')
#print item
#dict转成字符串
outitem = json.dumps(item,ensure_ascii=False)
#print outitem
#查看outitem类型
#print type(outitem)
#将unicode转化为输出格式Utf-8
page.write(outitem.encode('utf-8')+'\n')

page.close()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: