python beautifulsoup出现中文乱码问题怎么办

发布时间:2021-01-09编辑:脚本学堂
python beautifulsoup模块出现中文乱码问题怎么办,使用python beautifulsoup抓取网页输出网页标题时乱码,这里给出了二种解决方法,大家参考下。

python beautifulsoup中文乱码问题的解决方法

解决方法一:
使用python的BeautifulSoup来抓取网页然后输出网页标题,输出总是乱码。

代码:
 

复制代码 代码示例:

#!/usr/bin/python

from bs4 import BeautifulSoup
import urllib2

url = 'http://www.jb200.com/'
page = urllib2.urlopen(url)

soup = BeautifulSoup(page,from_encoding="utf8")
print soup.original_encoding
print (soup.title).encode('gb18030')

file = open("title.txt","w")
file.write(str(soup.title))
file.close()

for link in soup.find_all('a'):
    print link['href']

测试结果:
虽然输出是乱码的,但是写在文件里面却是正常的。

解决方法:
print一个对象的逻辑:内部是调用对象的__str__得到对应的字符串的,此处对应的是soup的__str__ 而针对于soup本身,其实已经是Unicode编码,所以可以通过指定__str__输出时的编码为GBK,以使得此处正确显示非乱码的中文。

而对于cmd:(中文的系统中)编码为GBK,所以只要重新编码为gb18030就可以正常输出了。

例如:
 

print (soup.title).encode('gb18030')

解决方法二:
BeautifulSoup在解析utf-8编码的网页时,如果不指定fromEncoding或者将fromEncoding指定为utf-8会出现中文乱码的现象。

解决:将Beautifulsoup构造函数中的fromEncoding参数的值指定为:gb18030

代码:
 

复制代码 代码示例:
import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen('http://www.jb200.com/');
soup = BeautifulSoup(page,fromEncoding="gb18030")
print soup.originalEncoding
print soup.prettify()