文档章节

使用requests库抓取页面的时候的编码问题

Airship
 Airship
发布于 2016/03/25 01:18
字数 602
阅读 67
收藏 3

我在开始加了以下的代码

# -*- coding: utf-8 -*-import sys
reload(sys)
sys.setdefaultencoding('utf-8')

但是用

print requests.Session().get(url, data=data).text

结果中输出了长这个样子的乱码
°æȨËùÓÐ 2013 ¶«ÄÏ´óѧÍøÂçÓëÐÅÏ¢ÖÐÐÄ

然后试着查看了一下上面文本的格式

print type(requests.Session().get(url, data=data).text)

输出的结果就是unicode,后来我又看了页面的head头中写了页面编码是gb2312,我后面又把代码改成了

print requests.Session().get(url, data=data).text.encode('gb2312')

结果就出现了下面的异常
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 227-228: illegal multibyte sequence1

把代码改成

print requests.Session().get(url, data=data).text.encode('gb2312', 'ignore')

依然是乱码

真的是没辙了,希望各位大大指点一下

=============================================================================================

首先,sys.setdefaultencoding is evil

其次,不会用 Requests 就去看文档,不要乱来。

  1. 如果 Requests 检测不到正确的编码,那么你告诉它正确的是什么:

    response.encoding = 'gbk'print response.text
  2. 原始内容在 response.content 里,bytes,自己想怎么处理就怎么处理。

  3. 单个请求完全没必要用 Session。直接 requests.get(xxx) 就可以了。

最后,弄不明白怎么处理编码错误的字符串就仔细想想,或者用 Python 3.x,不要散弹枪编程

以下是 Python 3。Python 2 在那个字符串前加个 u 告诉它是 unicode 也一样。

>>> '°æȨËùÓР2013 ¶«ÄÏ´óѧÍøÂçÓëÐÅÏ¢ÖÐÐÄ'.encode('latin1').decode('gbk')'版权所有 2013 东南大学网络与信息中心'

==============================================================================================

首先有一个问题,就是你用requests.Session().get(url,data=data)的方法获得的应该是bytes,你可以用type 看一下,既然是bytes的话,那么这个bytes是你所看到的gb2312编码之后的bytes,所以这里你应该用的是decode解码,而不是 encode编码。因为网页是gb2312编码的啊。所以试试decode,而不是encode。另外如果你想把得到的字符串存储到文件里面,那么还要注 意文件的编码,因为windows默认是gbk编码,你在open的时候要指定文件编码。
另外你还可以参考这个问题。
http://segmentfault.com/q/1010000000340967

=================================================================================================

首先先看下网站的charset是什么编码,比如是'utf-8'的,在open url的时候先encoding='utf-8',然后在print的时候,decode('utf-8'),或者跟楼上说的用python 3.0以上的版本对编码的问题简化了很多

=====================================================================================


本文转载自:https://segmentfault.com/q/1010000000341014

Airship
粉丝 42
博文 988
码字总数 20248
作品 0
南京
高级程序员
私信 提问
使用python和tableau对数据进行抓取及可视化

本篇文章介绍使用python抓取贷款及理财平台的数据,并将数据拼接和汇总。最终通过tableau进行可视化。与之前的python爬虫文章不同之处在于之前是一次性抓取生产数据表,本次的数据需要每天重...

铁扇公主1
2017/05/06
223
1
Python爬虫知识1.1 requests库的安装与使用

先来说说爬虫的原理:爬虫本质上是模拟人浏览信息的过程,只不过他通过计算机来达到快速抓取筛选信息的目的。所以我们想要写一个爬虫,最基本的就是要将我们需要抓取信息的网页原原本本的抓取...

铁扇公主1
2017/05/25
82
0
【Python】BeautifulSoap抓取并解析网页流程

一、BeautifulSoap 1.首先必须要导入bs4库,创建BeautifulSoap对象 #coding=utf-8 from bs4 import BeautifulSoup soup = BeautifulSoup(html,'lxml') #html 为下载的网页,lxml为解析器 2.......

CS青雀
02/24
0
0
Python网络爬虫基础及Requests库入门

Robots协议 网络爬虫的问题 在讲python网络爬虫之前,先来看看网络爬虫的一些问题以及robots协议。首先python爬虫功能主要使用的库有Requests库和Scrapy库。他们的区别如下: 正常情况下Web...

zengxiantao1994
2017/10/13
0
0
简单爬虫(urllib+BeautifulSoup)

爬虫是怎么实现的? 简单介绍 爬虫:一段自动抓取互联网信息的程序 从一个url出发,然后访问和这个url相关的各种url,并提取相关的价值数据。 URL:Uniform Resource Location的缩写,译为“...

廖少少
2017/10/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

利用mybatis generator生成实体类、Mapper接口以及对应的XML文件

项目中通常会遇到数据的持久化,如果是采用mybatis的orm,就会涉及到生成xml的问题,刚好mybatis官网提供了这么个插件MyBatis Generator,效果简直是棒呆。 1. 首先需要在build.gradle文件中...

啊哈关关
今天
2
0
SpringSocial相关的知识点

使用SprigSocial开发第三方登录 核心类 ServiceProvider(AbstractOauth2ServiceProvider):主要负责实现server提供商(例如QQ,微信等共有的东西),默认实现类是AbstractOauth2ServiceProvider...

chendom
今天
3
0
Java并发之AQS详解

一、概述   谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!   类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源...

群星纪元
昨天
3
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
昨天
3
0
react 子组件监听props 变化

componentWillReceiveProps //已经被废弃 getDerivedStateFromProps// 推荐使用//如果条件不存在必须要返回null static getDerivedStateFromProps(props, current_stat...

一箭落旄头
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部