- 论坛徽章:
- 0
|
小弟是新手,在用beautifulsoup抓取数据写入csv文件时,
遇到了字符编码的问题,自认想通了按思路改却总是会乱码,
望各路大侠指点
#coding=utf-8 #让这个python源文件按utf8编码
from __future__ import print_function
from bs4 import BeautifulSoup
import urllib2
import codecs
import sys
import re
reload(sys) #以上是引入库
sys.setdefaultencoding("utf-8")
strFile='book.csv'
f = codecs.open(strFile,'w','utf-8') #用写入方式打开按utf8编码的文档
f.write('bookname'+'\n') # 写入一个属性
print("\nGetting data for page...",end='')
url="http://www.bookschina.com/publishtj/02_AA_5_1_2/"
page2=urllib2.urlopen(url)
soup=BeautifulSoup(page2) #将url对应的网页建立一个beautifulsoup对象
page2.close()
name = soup.find(attrs = {"class":"books"}).find(attrs ={"class":"bookContent"}).find("class":"titlein").text #解析某本书的书名
n1 = name.decode("gbk") #由于网页http://www.bookschina.com/publishtj/02_AA_5_1_2/的编码是GBK,所以由gbk解 码
n2 = n1.encode("utf-8") #再编码为utf8符合将要写入的文件的编码方式
f.write(n2+'\n')
print("\n done",end='')
f.close()
print("\n over")
总的来说,我是这样想的:数据在传递时都是比特流,只是不同的编码方式会将其映射到不同的文字,
解码就是把比特流变成文字,编码就是把文字变成比特流
代码中的name在网页中是按gbk编码的,所以写代码时,应按gbk将其解码,再按utf8将其编码送入utf8方式打开的文件,变成按utf8编码的文字
但是,用cmd执行后,打开csv发现结果是乱码:鑴e簮鑴㈣劙鍗よ劆鑴屾病鎺宠劌纰岃剹
请问这是怎么回事呢?各位高手,我想了一晚上,底子太浅,实在没想通,望指点,感激不尽! |
|