前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python requests 网页编码问题

python requests 网页编码问题

作者头像
forxtz
发布2021-03-17 17:14:51
1.7K0
发布2021-03-17 17:14:51
举报
文章被收录于专栏:源懒由码源懒由码

  简介:不同的服务器采用的网页编码可能不一样,如果使用错误的编码发送数据,将不会得到正确的数据。

  目的:识别访问网页的编码,发送正确的编码数据和解码。

  参考链接:

Python+request:根据四种不同的提交数据方式进行post请求

Python 爬虫 (requests) 发送中文编码的 HTTP POST 请求

1、http请求编码的大致过程

浏览器->提交数据->数据编码->服务器->反编码->后台处理数据->反馈数据->编码数据->浏览器接受数据->解码数据->显示

2、网页编码的识别方式

在网页的<head>的<meta>标签里面,一般会有注释。

代码语言:javascript
复制
url = 'https://www.ip138.com/post/'  # <meta charset="gb2312">

对于返回的数据编码,可以通过response.headers的content-type属性获得。如果返回的response中没有的话,则一般为网页中的编码。

3、实例测试--访问一个gbk编码的网站

初始化。

代码语言:javascript
复制
url = 'https://www.ip138.com/post/'  # <meta charset="gb2312">
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36',
    }
req = requests.Session()
req.headers.update(headers)
r = req.get(url)
data = {
    'area':'北京',
    'action':'area2zone'
}
代码语言:javascript
复制
requests默认为utf8编码,如果以非gbk编码访问gbk的一个查询页面,并对返回值进行utf8编码,则会造成无法正确查询,返回结果形成乱码。
代码语言:javascript
复制
如果将字典传给 requests 的 data 属性:requests 自动为数据进行编码
如果将字符串传给 requests 的 data 属性:requests 会直接发送字符串数据
代码语言:javascript
复制
url = 'https://www.ip138.com/post/search.asp'
r = req.get(url,params=data)  #  t.text 查询乱码  status_code=200 状态码为正常
print(r.url)
r.encoding = 'utf8'
print(r.text)
with open('utfgetgbk.html', 'wb') as f:
    f.write(r.content)

查询结果图:

正确的方式,应该以gbk编码方式进行访问。顺利查询。urlencode将字典对象编码为字符串。

代码语言:javascript
复制
url = 'https://www.ip138.com/post/search.asp'
r = req.get(url,params=urlencode(data,encoding='gbk'))  # 正常返回 t.text  status_code=200
print(r.url)
r.encoding = 'gb2312'
with open('getgbk.html', 'wb') as f:
    f.write(r.content)

小结:

爬虫的过程中,编码的错误会造成错误。因此要对编码具有一定掌握。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档