python urllib爬取网页编码问题

简介: 利用python urllib库爬取网页,有时获得的网页打印或写文件遇到编码问题,找了许久终于知道为什么了。首先利用urlopen()函数获取网页对象,再利用info()函数打印网页的相关信息,确定网页的编码及是否压缩。

利用python urllib库爬取网页,有时获得的网页打印或写文件遇到编码问题,找了许久终于知道为什么了。

首先利用urlopen()函数获取网页对象,再利用info()函数打印网页的相关信息,确定网页的编码及是否压缩。

import urllib.request

fp = urllib.request.urlopen('http://www.sina.com')
mybytes = fp.read()
text = mybytes.decode('utf8')
print(text)
报错


显示编码错误,刚开始,傻傻地试各种编码,utf-8,gbk,gb2312,都不行,心里堵得慌,是在玩我吗?

so,开始怀疑是bug,但是有的网页又不会出错,这就奇怪了,最后google找到了一个解释,说是返回的网页数据是压缩格式,恍然大悟,先打印网页信息,看一眼


gzip,网页是压缩后的,所以要先解压,上代码

import urllib.request
import zlib

fp = urllib.request.urlopen('http://www.sina.com')
mybytes = fp.read()
decompressed_data = zlib.decompress(mybytes ,16+zlib.MAX_WBITS)
text = decompressed_data.decode('utf8')
print(text)
print(fp.info())
结果


Google问题原版

http://stackoverflow.com/questions/3746993/change-python-byte-type-to-string

http://stackoverflow.com/questions/3703276/how-to-tell-if-a-file-is-gzip-compressed/3703300#3703300

目录
相关文章
|
Web App开发 数据采集 JavaScript
动态网页爬取:Python如何获取JS加载的数据?
动态网页爬取:Python如何获取JS加载的数据?
1938 58
|
数据采集 存储 NoSQL
Python爬虫案例:Scrapy+XPath解析当当网网页结构
Python爬虫案例:Scrapy+XPath解析当当网网页结构
|
数据采集 存储 前端开发
Python爬虫自动化:批量抓取网页中的A链接
Python爬虫自动化:批量抓取网页中的A链接
|
数据采集 Web App开发 JavaScript
Python爬虫解析动态网页:从渲染到数据提取
Python爬虫解析动态网页:从渲染到数据提取
|
数据采集 Web App开发 JavaScript
Python爬虫如何获取JavaScript动态渲染后的网页内容?
Python爬虫如何获取JavaScript动态渲染后的网页内容?
|
JavaScript 前端开发 开发者
探索 DrissionPage: 强大的Python网页自动化工具
DrissionPage 是一个基于 Python 的网页自动化工具,结合了浏览器自动化的便利性和 requests 库的高效率。它提供三种页面对象:ChromiumPage、WebPage 和 SessionPage,分别适用于不同的使用场景,帮助开发者高效完成网页自动化任务。
1734 4
|
数据采集 Web App开发 iOS开发
如何使用 Python 语言的正则表达式进行网页数据的爬取?
使用 Python 进行网页数据爬取的步骤包括:1. 安装必要库(requests、re、bs4);2. 发送 HTTP 请求获取网页内容;3. 使用正则表达式提取数据;4. 数据清洗和处理;5. 循环遍历多个页面。通过这些步骤,可以高效地从网页中提取所需信息。
|
云计算 Python
用python给你写个简单的计算器功能网页啊
这张图片展示了阿里巴巴集团的组织架构图,涵盖了核心电商、云计算、数字媒体与娱乐、创新业务等主要板块,以及各板块下的具体业务单元和部门。
|
数据采集 Java Python
如何用Python同时抓取多个网页:深入ThreadPoolExecutor
在信息化时代,实时数据的获取对体育赛事爱好者、数据分析师和投注行业至关重要。本文介绍了如何使用Python的`ThreadPoolExecutor`结合代理IP和请求头设置,高效稳定地抓取五大足球联赛的实时比赛信息。通过多线程并发处理,解决了抓取效率低、请求限制等问题,提供了详细的代码示例和解析方法。
571 0
如何用Python同时抓取多个网页:深入ThreadPoolExecutor
|
前端开发 Python
帮我用python作为网页前端输出“hallow world
帮我用python作为网页前端输出“hallow world

推荐镜像

更多