pytho爬虫中文乱码解决方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MHSMIE/article/details/72171520

刚接触BeautifulSoup,在命令行输出爬取到网页的内容时,中文一直是乱码,很气。

中文乱码很容易想到是编码不对的问题,可是对编码方式的原理老姐也不多,对这个工具也不是很了解,只能硬着头皮去尝试,反正最后一定能解决

首先是遇到的问题

源码为

# -*-coding:utf-8 -*-
import urllib
import urllib2

url="http://www.baidu.com"
request=urllib2.Request(url)
response=urllib2.urlopen(request)
print response.read().decode("utf-8")
输入的结果为

提示很明显就是说编码问题,将utf-8改为gbk,依旧类似的错误

用BeautifulSoup的prettify依旧是这个问题,真的很气

如果将decode方法去掉,则可以输出爬取到的网页内容,只不过中文会是乱码。

中文乱码问题在编程中是非常常见的,但是解决起来就相当麻烦了。

一开始想到可能需要用网页的编码方式才行,所以找到charset工具(下载安装和使用教程点击),经过尝试没有解决问题

然后还是尝试了很多编码解码方式,包括ignore等,都不行

经过一天的尝试和询问终于找到解决方法

因为将网页内容输出到终端会乱码,但是保存到文件中就不会,所以应该是终端的编码问题,不是代码的问题

测试源码为

import urllib
import urllib2
import sys
type = sys.getfilesystemencoding()
url = 'http://category.dangdang.com/pg1-cp01.36.11.00.00.00-shlist.html'
request=urllib2.Request(url)
html=urllib2.urlopen(request)
soup_packtpage = BeautifulSoup(html)  
print soup_packtpage.title
file =open("title.txt","w")
file.write(str(soup_packtpage.title))
print一个对象的逻辑:内部是调用对象的__str__得到对应的字符串的,此处对应的是soup的__str__ 而针对于soup本身,其实已经是Unicode编码,所以可以通过指定__str__输出时的编码为GBK,以使得此处正确显示非乱码的中文
而对于cmd:(中文的系统中)编码为GBK,所以只要重新编码为gb18030就可以正常输出了

所以修改源码为

import urllib
import urllib2
import sys
type = sys.getfilesystemencoding()
url = 'http://category.dangdang.com/pg1-cp01.36.11.00.00.00-shlist.html'
request=urllib2.Request(url)
html=urllib2.urlopen(request)
soup_packtpage = BeautifulSoup(html)  
print soup_packtpage.prettify().encode('gb18030')
print soup_packtpage.title.encode('gb18030')
file =open("title.txt","w")
file.write(str(soup_packtpage.title))
这样就可以了

对于read的解决方法,也是这个问题

import urllib
import urllib2
import sys
type = sys.getfilesystemencoding()
url = 'http://category.dangdang.com/pg1-cp01.36.11.00.00.00-shlist.html'
request=urllib2.Request(url)
response=urllib2.urlopen(request)
print response.read().decode("gbk").encode(type)
这里用到了getfilesystemencoding()方法,这个方法就是获取系统的编码方式

总结,最后问题解决了,回头一看感觉也不是什么大问题,但是在解决的过程中,却各处碰壁。





展开阅读全文

没有更多推荐了,返回首页