python urlopen 乱码_Python 2.7.3 urllib2.urlopen 获取网页出现乱码解决方案

出现乱码的原因是,网页服务端有bug,它硬性使用使用某种特定的编码方案,而并没有按照客户端的请求头的编码要求来发送编码。

解决方案:使用chardet来猜测网页编码。

1.去chardet官网下载chardet的py源码包。

2.把chardet目录从源码包里解压到项目文件夹内。

3.通过 import chardet 来引用它,然后:

response = None

#尝试下载网页

try:

response = urllib2.urlopen("http://www.baidu.com")

except Exception as e:

print "错误:下载网页时遇到问题:" + str(e)

return

if response.code != 200:

print "错误:访问后,返回的状态代码(Code)并不是预期值【200】,而是【" + str(response.code) + "】"

return

if response.msg != "OK":

print "错误:访问后,返回的状态消息并不是预期值【OK】,而是【" + response.msg + "】"

return

#读取html代码

htmlCode = None

try:

htmlCode = response.read()

except Exception as e:

print "错误:下载完毕后,从响应流里读出网页代码时遇到问题:" + str(e)

return

#处理网页编码

htmlCode_encode = None

try:

#猜编码类型

htmlCharsetGuess = chardet.detect(htmlCode)

htmlCharsetEncoding = htmlCharsetGuess["encoding"]

#解码

htmlCode_decode = htmlCode.decode(htmlCharsetEncoding)

#获取系统编码

currentSystemEncoding = sys.getfilesystemencoding()

#按系统编码,再进行编码。

'''

做这一步的目的是,让编码出来的东西,可以在python中进行处理

比如:

key = "你好"

str = "xxxx你好yyyy"

keyPos = str.find( key )

如果不做再编码,这一步就可能会报错出问题

'''

htmlCode_encode = htmlCode_decode.encode(currentSystemEncoding)

except Exception as e:

print "错误:在处理网页编码时遇到问题:" + str(e)

return

#htmlCode_encode即为所求

return htmlCode_encode

【真相揭秘】requests获取网页编码乱码本质

有没有被网页编码抓狂,怎么转都是乱码. 通过查看requests源代码,才发现是库本身历史原因造成的. 作者是严格http协议标准写这个库的,里第16章国际化里提到,如 ...

node爬虫之gbk网页中文乱码解决方案

之前在用 node 做爬虫时碰到的中文乱码问题一直没有解决,今天整理下备忘.(PS:网上一些解决方案都已经不行了) 中文乱码具体是指用 node 请求 gbk 编码的网页,无法正确获取网页中的中文(需 ...

Python获取网页Html文本

Python爬虫基础 1.获取网页文本 通过urllib2包,根据url获取网页的html文本内容并返回 #coding:utf-8 import requests, json, time, re, ...

python使用urllib2抓取网页

1.使用python的库urllib2,用到urlopen和Request方法. 2.方法urlopen原形 urllib2.urlopen(url[, data][, timeout]) 其中: u ...

Python获取网页指定内容(BeautifulSoup工具的使用方法)

Python用做数据处理还是相当不错的,如果你想要做爬虫,Python是很好的选择,它有很多已经写好的类包,只要调用,即可完成很多复杂的功能,此文中所有的功能都是基于BeautifulSoup这个包. ...

Python爬虫学习——获取网页

通过GET请求获取返回的网页,其中加入了User-agent信息,不然会抛出"HTTP Error 403: Forbidden"异常, 因为有些网站为了防止这种没有User-ag ...

有关利用python获取网页, 以及KDD近几年论文标题与摘要链接

最近一直在看KDD的论文,不过,由于老师并没有什么合理的方向性,所以考虑把kdd中的大部分内容都利用python将所有标题.摘要获取下来. 还有一个原因在于,看acm上的摘要,都只显示了两行,再看多点 ...

Python爬虫学习之获取网页源码

偶然的机会,在知乎上看到一个有关爬虫的话题,因为强烈的好奇心和觉得会写爬虫是一件高大上的事情,所以就对爬虫产生了兴趣. 关于网络爬虫的定义 ...

Python: PySide(Qt)异步获取网页源码

学习PyQt UI编程笔记.相对PyQt来说,PySide资料为少. 此篇记录异步获取代码后,同步显示于界面窗体中,涉及线程网步,此为知识点. 直录代码: # encoding: utf-8 from ...

随机推荐

Java注解详解

Java1.5引入了注解,注解作为程序的元数据嵌入到程序中.注解可以被一些解析工具或者编译工具进行解析.我们也可以声明注解在编译过程或者执行时产生作用. 创建Java自定义注解: package co ...

Tornado实战项目(伪JD商城)

预备知识 在之前tornado商城项目中,在开始之前需要引入一些项目设计知识,如接口,抽象方法抽象类,组合,程序设计原则等,个人理解项目的合理设计可增加其灵活性, 降低数据之间的耦合性,提高稳定性,下 ...

JMS发布/订阅消息传送例子

前言 基于上篇文章"基于Tomcat + JNDI + ActiveMQ实现JMS的点对点消息传送"很容易就可以编写一个发布/订阅消息传送例子,相关环境准备与该篇文章基本类似,主要 ...

基本概率分布Basic Concept of Probability Distributions 4: Negative Binomial Distribution

PDF version PMF Suppose there is a sequence of independent Bernoulli trials, each trial having two p ...

eclipse 工作环境配置

1.更换编辑颜色, http://eclipse-color-theme.github.io/update/ 下载离线安装包,解压缩 eclipse-color-theme-update-site\u ...

java并行调度框架封装及演示样例

參考资料:  阿里巴巴开源项目 CobarClient  源代码实现. 分享作者:闫建忠 分享时间:2014年5月7日 ---------------------------------------- ...

Linux企业级项目实践之网络爬虫(9)——通过URL抓取网页内容

基本URL包含模式(或称协议).服务器名称(或IP地址).路径和文件名,如"协议://授权/路径?查询".完整的.带有授权部分的普通统一资源标志符语法看上去如下:协议://用户名: ...

evernote

evernote hebinn@163.com How to get Note Link Right Click Note & Copy Note Link Open Note : Note- ...

python 将验证码保存到本地 读取 写入

#验证码 #读取验证码网址.打开本地路径.写入.输入验证码 downpicture = urllib.request.urlopen(SecretCodeUrl).read() local = ope ...

用python帮朋友刷帖

0x0前言: 答应了一个朋友帮他刷贴,自己用python写了一个脚本刷. 虽然行为不好..但是缺钱用... 0x01准备: splinter模块: chrome浏览器驱动 0x02开始: 1.进入百度 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值