昨天在帮同学解析一批从网络上爬取的文件时,遇到一个奇葩的问题,文件本身的编码是gbk,Eclipse编辑环境的默认编码是utf8,使用常规的open方法批量打开文件时,某些文件里存在一些不可被gbk识别的特殊字符导致读取错误,而这些特殊字符又是存在于utf8编码中的。经不断尝试,发现一个非常好的解决的方法:使用Python自带的codecs。codecs就是为编码转码而生的,关于此功能的很多其它详情请移步 https://docs.python.org/3.2/library/codecs.html

# -*- coding: utf8 -*-
#下面代码要实现的效果是将gbk编码的文件批量转存为utf8编码的文件
import os;
import codecs;
from bs4 import BeautifulSoup; #以gb18030编码读文件的函数
def ReadFile(filePath,encoding="gb18030"): #注意这里的编码格式
with codecs.open(filePath,"r",encoding) as f:
return f.read() #以utf8编码又一次写文件的函数
def WriteFile(filePath,u,encoding="utf-8"):
with codecs.open(filePath,"w",encoding) as f:
f.write(u) fileList=os.listdir("E:/content/"); #获取原文件列表
for eachFile in fileList: #遍历文件名称
temp=ReadFile("E:/content/"+eachFile); #读文件
WriteFile('E:/content_0629/'+eachFile, temp, "utf8"); #将读取的内容转存为utf8编码的文件
print('finished.')

另外,文件完毕转存之后。在使用BeautifulSoup进行解析时,想过滤掉一些噪声信息,完整代码例如以下:

# -*- coding: utf8 -*-
import os;
from bs4 import BeautifulSoup;
n=0; fileList=os.listdir("E:/content_0629");
for eachFile in fileList:
n=n+1; #设置文件序号 rawText= open(r"E:/content_0629/"+eachFile,'r',encoding='utf8');#读文件
bs4Text=BeautifulSoup(rawText);#调用BeautifulSoup进行解析 title=bs4Text.find('h2'); #h2标签中放的是文章正文标题
if(title==None): #推断标题标签是否存在。假设不存在则忽略当前文件
continue;
else:
title=title.get_text(); #获取标题内容文本
title=title.replace(" ","");#替换掉当中的全角空格
title=title.replace(" ","");#替换掉当中的半角空格 mainContent=bs4Text.find('div',{'class':'content'}); #依据标签名和标签属性值获取正文内容标签
if(mainContent==None):#推断此标签是否存在。假设不存在则忽略当前文件
continue;
else:
mainContent=mainContent.get_text();
mainContent=mainContent.replace(" ","");
mainContent=mainContent.replace(" ","");
mainContent=mainContent.replace("\t","");
mainContent='\n'.join(mainContent.split()) #将多个连续的空行替换为一个空行 #将解析后的文本保存到文件里。仍以utf8编码
fwriter=open('E:/result_0629/resutl_'+str(n)+".txt",'w',encoding='utf8');
fwriter.write(title+"\n"+mainContent);
fwriter.close(); print('finished.')

最新文章

  1. 实时事件统计项目:优化solr和morphline的时间字段
  2. supervisord 小记
  3. <<数字是世界的>>读后感
  4. codevs1024一塔湖图(丧心病狂的建图)
  5. Linux 杀死挂起的进程
  6. CSS设计指南之浮动与清除
  7. python实现微信接口(itchat)
  8. MySql Host is blocked because of many connection errors;
  9. 每10秒执行定时任务-crontab
  10. SecureCRT安装使用
  11. 为帮助保护你的安全,您的Web浏览器已经限制此文件显示可能访问您的计算机的活动内容
  12. python基础学习 Day19 面向对象的三大特性之多态、封装 property的用法(1)
  13. 消息中间件及WebSphere MQ入门(转载)
  14. Hadoop详细配置教程
  15. 回到顶部bug
  16. Nuget出现错误怎么办?
  17. (热死你)Resin https ssl Linux 配置,实战可用
  18. Python WSGI v1.0 中文版(转)
  19. Activity has leaked window that was originally added(以解决)
  20. 【bzoj1050】[HAOI2006]旅行comf

热门文章

  1. COWRUN
  2. 阿里&163 yum源
  3. webp学习http://isux.tencent.com/introduction-of-webp.html
  4. 洛谷 P2080 增进感情
  5. Supermap 组合单值专题图与标签专题图演示样例
  6. php intval函数
  7. 44.Node.js Express 框架--web框架
  8. 3.Maven之(三)Maven插件
  9. windows10系统window键失灵,没有反应
  10. Android ImageView设置图片原理(上)