python3获取中文网页乱码的问题

在python3中读取网页的时候,会有乱码的问题,如果直接打开,会有错误

Traceback (most recent call last):
  File "E:/Source_Code/python34/HTMLParser_in_3.py", line 81, in <module>
    context = f.read()
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xad in position 175: illegal multibyte sequence

然后发现用二进制方式打开(‘rb‘),就没有问题,但是处理的时候,就会bytes类型和str类型不兼容的错误,直接强类型转换,后续处理的时候又会获取不到任何东西。

在python3中的str的decode方法,做了改变,因为python3中全部用Unicode编码,str取消了decode方法。

上网查了相关资料,发现,二进制打开后,对于得到的bytes类型有decode方法可以转换为可处理的str。

  

/tmp/ python3
Python 3.2.3 (default, Feb 20 2013, 14:44:27)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f1 = open("unicode.txt", ‘r‘).read()
>>> print(f1)
寒冷

>>> f2 = open("unicode.txt", ‘rb‘).read() #二进制方式打开
>>> print(f2)
b‘\xe5\xaf\x92\xe5\x86\xb7\n‘
>>> f2.decode()
‘寒冷\n‘
>>> f1.decode()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: ‘str‘ object has no attribute ‘decode‘
>>> 
时间: 2024-10-02 08:02:19

python3获取中文网页乱码的问题的相关文章

swfupload组件后台获取中文文件名乱码的问题解决

   问题描述:用swfupload上传文件,含有中文名称的文件上传会报错,我用的是获取FileItem对象,用FileItem对象的getName()方法获取文件名称会乱码,试着用request.setCharacterEncoding("UTF-8")及fileName= new String(fileName.getBytes("iso-8859-1";),"UTF-8"); 都不可以,用FileItem对象.getString("

python抓取中文网页乱码通用解决方法

我们经常通过python做采集网页数据的时候,会碰到一些乱码问题,今天给大家分享一个解决网页乱码,尤其是中文网页的通用方法. 首页我们需要安装chardet模块,这个可以通过easy_install 或者pip来安装. 安装完以后我们在控制台上导入模块,如果正常就可以. 比如我们遇到的一些ISO-8859-2也是可以通过下面的方法解决的. 直接上代码吧: import urllib2import sysimport chardet req = urllib2.Request("http://ww

BeautifulSoup解决中文网页乱码

以下代码,在执行结果中的中文出现乱码. from bs4 import BeautifulSoup import urllib2 request = urllib2.Request('http://www.163.com') response = urllib2.urlopen(request) html_doc = response.read() soup = BeautifulSoup(html_doc) print soup.find_all('a') 因为中文页面编码是gb2312,gb

python3获取一个网页特定内容

我们今天要爬取的网址为:https://www.zhiliti.com.cn/html/luoji/list7_1.html 一.目标:获取下图红色部分内容 即获取所有的题目以及答案. 二.实现步骤. 分析:1,首先查看该网站的结构. 分析网页后可以得到: 我们需要的内容是在该网页<li>标签下,详细内容链接在<small>的<a>的href中. 但是这样我们最多只能获取这一页的内容 别着急 我们点击第二页看一下目标网址有什么变化 我们发现目标网址最后的数字变成了2 再

jquery之getJSON方法获取中文数据乱码解决方法

最近公司做的东西要用到js,感觉js太繁琐,所以自己学起了jquery,发现jquery确实强大.在学到jquery ajax的时候(用的工具是eclipse),发现$.getJSON()方法请求服务器的json数据(有中文),返回到浏览器页面是乱码,怎么办呢? 原因是浏览器编码和服务器里的json数据编码不一致, 1.对着项目右键,properties,将text file encoding,改为utf-8.这时访问页面,发现还是乱码.我们还需要一步. 2.对着json文件,右键,proper

Python3获取新浪微博内容乱码问题

用python获取新浪微博最近发布内容的时候调用 public_timeline()函数的返回值是个jsonDict对象,首先需要将该对象通过json.dumps函数转换成字符串,然后对该字符串用GBK进行编码和解码,注意编码的时候函数encode的第二个参数要使用ignore(默认是strict),以防止当解码错误的时候报错而使程序意外退出 . import webbrowser import sinaweibopy3 from time import sleep import json de

request.getParameter获取中文是乱码的解决方法?

解决方法1: 直接设置编码格式:request.getParameter("").getBytes("iso-8859-1","gb2312"); 解决方法2: 设置tomcat/conf/server.xm中,在Connector中加入:URIEncoding="UTF-8" <Connector port="8080" protocol="HTTP/1.1" connectio

python3获取指定网页,指定保存位置

import osimport request def DownloadFile(url, savePath): if not os.path.exists(savePath): print("downloading {0}".format(url)) kv={'user-agent':'Mozilla/5.0'} try: r = requests.get(url,headers=kv, timeout=60) r.raise_for_status() # 如果响应状态码不是 200

获取网页乱码

1.是用curl抓取的数据是用类似gzip压缩后的数据导致的乱码.乱码:curl www.1ting.com |more乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | more不乱码:curl -H "Accept-Encoding: gzip"www.1ting.com | gunzip | more 不乱码:curl www.1616.net |more乱码:curl -H "Accept-Encod