python抓取并保存html页面时乱码问题的解决方法
作者:holybin 发布时间:2022-06-06 21:41:40
标签:python,抓取,html,乱码,解决方法
本文实例讲述了python抓取并保存html页面时乱码问题的解决方法。分享给大家供大家参考,具体如下:
在用Python抓取html页面并保存的时候,经常出现抓取下来的网页内容是乱码的问题。出现该问题的原因一方面是自己的代码中编码设置有问题,另一方面是在编码设置正确的情况下,网页的实际编码和标示的编码不符合造成的。html页面标示的编码在这里:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
这里提供一种简单的办法解决:使用chardet判断网页的真实编码,同时从url请求返回的info判断标示编码。如果两种编码不同,则使用bs模块扩展为GB18030编码;如果相同则直接写入文件(这里设置系统默认编码为utf-8)。
import urllib2
import sys
import bs4
import chardet
reload(sys)
sys.setdefaultencoding('utf-8')
def download(url):
htmlfile = open('test.html','w')
try:
result = urllib2.urlopen(url)
content = result.read()
info = result.info()
result.close()
except Exception,e:
print 'download error!!!'
print e
else:
if content != None:
charset1 = (chardet.detect(content))['encoding'] #real encoding type
charset2 = info.getparam('charset') #declared encoding type
print charset1,' ', charset2
# case1: charset is not None.
if charset1 != None and charset2 != None and charset1.lower() != charset2.lower():
newcont = bs4.BeautifulSoup(content, from_encoding='GB18030') #coding: GB18030
for cont in newcont:
htmlfile.write('%s\n'%cont)
# case2: either charset is None, or charset is the same.
else:
#print sys.getdefaultencoding()
htmlfile.write(content) #default coding: utf-8
htmlfile.close()
if __name__ == "__main__":
url = 'https://www.jb51.net'
download(url)
得到的test.html文件打开如下,可以看到使用的是UTF-8无BOM编码格式存储的,也就是我们设置的默认编码:
希望本文所述对大家Python程序设计有所帮助。


猜你喜欢
- 内容摘要:在网页制作中,有许多的术语,例如:CSS、HTML、DHTML、XHTML等等。在下面的文章中我们将会用到一些有关于HTML的基本
- openpyxl特点openpyxl(可读写excel表)专门处理Excel2007及以上版本产生的xlsx文件,xls和xlsx之间转换容
- 正则表达式正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为&q
- 目录logging的简单使用|2logging常见对象|3logging基本使用|4logging之Formatter对象|5logging
- <script type="text/javascript">一、获取url所有参数值function US
- 在网上查了一下,在网上收集了Java与JavaScript中使用的两个例子,试验过,分享下。1、Java:package org.bearf
- asp.net和php哪个更好?在.net之前,微软的是ASP。在微软的大力推广下,其看起来还是很有前途的。但现在,微软想推广asp.net
- 在线音乐播放器,使用python的Tkinter库做了一个界面,感觉这个库使用起来还是挺方便的,音乐的数据来自网易云音乐的一个接口,通过ur
- 下面就是使用Python爬虫库BeautifulSoup对文档树进行遍历并对标签进行操作的实例,都是最基础的内容html_doc = &qu
- 1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数
- 但是,具有identity特性的字段,不需要具有唯一性,更不必须是主键。 可以通过,set identity_insert tablenam
- Go 单元测试工具测试分为4个层次单元测试:对代码进行测试集成测试:对一个服务的接口测试端到端测试(链路测试):从一个链路的入口输入测试用例
- 本文实例讲述了python实现在控制台输入密码不显示的方法。分享给大家供大家参考。具体实现方法如下:import console;names
- 在python中读取csv文件时,一般操作如下:import pandas as pdpd.read_csv(filename)该读文件方式
- 博主做过比较多项目的archive脚本编写,对于这种删除数据的脚本开发,肯定是一开始的话用最简单的一个delete语句,然后由于部分表数据量
- 解决window.open后返回object的错误 <a href="javascript:void(window.open
- window对文件夹的操作主要包括移动/剪切/复制,本篇文章主要用jQuery来实现,下面一起来了解一下把。1.先看下效果吧!2.在添加一个
- Unittest1.环境Unittest为Python内嵌的测试框架,不需要特殊配置,仅需要在File---settings---Tools
- 定位色块常用到hsv色彩空间下的颜色阈值,笔者曾经用openmv时,其IDE有自带一个阈值编辑器,使用起来非常方便,现在在linux上跑cv
- 最近学了一个关于省市级联简单的小例子,贴出来与大家分享一下:<!DOCTYPE html><html lang="