Python3 利用requests抓取网页源码中文乱码问题(由gb2312编码引起)

核心问题:

  • meta charset = “gb2312”
  • requests
  • 中文乱码
  • ×îÐÂÏûÏ¢_¡¶ÃλÃÎ÷ÓΡ·µçÄÔ°æ¹Ù·½ÍøÕ¾

以梦幻西游官网为例

<!DOCTYPE html>
<head>
<meta charset="gb2312" />
<!--This is Git Project From XYQ/xyq-gw-20170104(4899)-->
<title>最新消息_《梦幻西游》电脑版官方网站 - 网易西游题材扛鼎之作</title>
<meta name="keywords" content="《梦幻西游》电脑版,Q版网游,人气网游,回合制网游, 网易游戏,梦幻西游下载,梦幻西游官网, 梦幻西游序列号,最好玩的网游" />
<meta name="description" content="《梦幻西游》电脑版,网易回合制网游旗舰,西游题材扛鼎之作;3.6亿注册用户,271万玩家最高在线,每月有新服开放。人物和画面超可爱、轻轻松松交朋友!" />
<meta name="author" content="网易,NetEase Inc." />
<meta name="copyright" content="网易,NetEase Inc." />
<meta name="pmid" content="272711" />
<meta name="editor" content="rosiel" />
<meta name="designer" content="QQ,rain" />
<meta name="front-end technicist" content="Django" />
<meta name="animator" content="hy" />
<link type="text/css" rel="stylesheet" href="http://res.xyq.netease.com/gw/13v1/css/common.css" media="all" />
<style>
.NIE-share1 .NIE-share-more em{top: -17px  !important;}
</style>
<!--[if lte IE 8]>
<script charset="gb2312" src="http://res.nie.netease.com/comm/html5/createEle.js"></script>
<![endif]-->
<!-- jquery mix NIE (最新版本)-->
<script charset="gb2312" src="http://res.nie.netease.com/comm/js/jquery(mixNIE).last.js"></script>
<script charset="gb2312" src="http://res.xyq.netease.com/gw/13v1/js/common.js"></script>
</head>

python爬取代码

# -*- coding: utf-8 -*-
>>> import requests
>>> url = 'http://xyq.163.com/news/index.html'
>>> r = requests.get(url)
>>> data = r.text
>>> title = data.split('<title>')[1].split(' ')[0]
>>> print(title)
×îÐÂÏûÏ¢_¡¶ÃλÃÎ÷ÓΡ·µçÄÔ°æ¹Ù·½ÍøÕ¾
>>>

解决方案

在获取网页内容时
将原文件转码成latin1编码(使用encode函数)
再解码成gbk编码(使用decode函数
即可输出正确中文

# -*- coding: utf-8 -*-
>>> import requests
>>> url = 'http://xyq.163.com/news/index.html'
>>> r = requests.get(url)
>>> data = r.text.encode("latin1").decode("gbk")
>>> title = data.split('<title>')[1].split(' ')[0]
>>> print(title)
最新消息_《梦幻西游》电脑版官方网站
>>>
阅读更多

没有更多推荐了,返回首页