1. 程式人生 > >Python3 利用requests抓取網頁原始碼中文亂碼問題(由gb2312編碼引起)

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)
最新訊息_《夢幻西遊》電腦版官方網站
>>>