python2编码问题解决_python2.7 - python 中文编码问题如何解决?

问 题

小弟刚接触python,每次处理中文时都需要百度google大半天,一头雾水。

下面是一小段爬虫:

# -*- encoding:"utf-8"-*-

import urllib2

import sys

from bs4 import BeautifulSoup

reload(sys)

sys.setdefaultencoding('utf8')

headers = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}

req=urllib2.Request(url='http://bj.58.com/',headers=headers)

page = urllib2.urlopen(req)

html=page.read().decode('utf-8').encode('gbk')

soup = BeautifulSoup(html)

title = soup.find_all('h2')

# links = soup.find_all('a')

print title[10].get_text()

出现报错:

UnicodeEncodeError: 'gbk' codec can't encode character u'xbb' in position 13167: illegal multibyte sequence

小弟不是很明白遇到中文时,需要如何处理才能尽量不报错,是要写一大段代码判断还是一两行就能解决问题,比如:

reload(sys)

sys.setdefaultencoding('utf8')

这两行,我看有网友说是个好方法,但我感觉不是很有用。不知道是不是方法不对。

请各位大神不吝指教,小弟虚心学习

解决方案

1、建议用requests来爬网页

2、检查内容的encoding

3、尽量把内容输出到文本文件中查看,而不是控制台(控制台显示中文容易出错)

4、输出到文本文件前检查是否需要encode('utf-8')

import codecs, requests

r = requests.get(url)

print r.encoding # 如果输出是iso-8859-1, 应手动把encoding改为GBK或utf-8

# r.encoding = 'gbk'

my_text = r.content # 或者是r.text

my_text = my_text.encode('utf-8')

with open('xxx.txt','wb') as f:

f.write(my_text)

with codecs.open('xxx.txt','r','utf-8') as f2:

s = f2.readlines() # 或者是 f2.read()

20160801修改:针对你给的url,我写了一个修改过的代码在下面

r = requests.get(url)

print r.encoding

r.encoding = 'utf-8' # 查看你的网页源码,里面charset会提到编码格式是utf-8

my_text = r.text # 经试验在你的url下text可以保存,content不行

with codecs.open('xxx.txt','w','utf-8') as f:

f.write(my_text)

wx.jpg

扫一扫关注IT屋

微信公众号搜索 “ IT屋 ” ,选择关注与百万开发者在一起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值