解决python中的乱码问题

> 在爬取网页的时候我们经常会遇到乱码,但是我们可以通过查看网页的源代码查看charset方式。打开要访问的url,查看网页源码会发现类似代码:<meta charset="utf-8">,通常在代码中加入decode(‘utf8’)进行解码即可

代码如下:(有时不需要编码即可默认输出了,所以不必多此一举)

# -*- coding: utf-8 -*-
import urllib.request

url = \'http://www.sanplit.cn\'
req = urllib.request.urlopen(url)
print(req.read())    #输出源码,req.read().decode(\'utf8\'),编码方式根据实际情况修改

使用的是python的urllib模块读取首页的html

# -*- coding: utf-8 -*-
from urllib.request import urlopen

url="http://www.sanplit.cn"
data=urlopen(url).read()
print(data.decode(\'utf-8\',\'ignore\').encode(\'gbk\',\'ignore\'))

使用python中的BeautifulSoup模块及urllib模块:

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
from urllib.request import urlopen

url="http://www.sanplit.cn"
content=urlopen(url)
soup=BeautifulSoup(content, \'lxml\')
print(soup.encode(\'gbk\'))    #gbk为你想要转换成的编码方式。

如果不确定网页编码方式,我们可以通过以下方式获取编码

# -*- coding: utf-8 -*-
import requests

res = requests.get(\'http://sanplit.cn\')
print(res.encoding)    #UTF-8

# -*- coding: utf-8 -*-
import chardet
from urllib.request import urlopen

url = \'http://www.sanplit.cn\'
html = urlopen(url).read()
print(chardet.detect(html))    #{\'encoding\': \'utf-8\', \'confidence\': 0.99, \'language\': \'\'}

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
from urllib.request import urlopen

url = \'http://www.sanplit.cn\'
content = urlopen(url)
soup = BeautifulSoup(content, \'lxml\')
print(soup.original_encoding) #utf-8

# -*- coding: utf-8 -*-
import requests
from lxml import etree

#请求头和目标网址
headers = {
    \'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36\'
}
url = \'http://sanplit.cn\'
#获取和解析网页
r = requests.get(url, headers=headers)
r.encoding = r.apparent_encoding
dom = etree.HTML(r.text)
print(r.apparent_encoding)    #utf-8

如果以上没有解决,依然出现乱码,可以检查下头部信息Accept-Encoding这个字段,如果有,删除这个字段,乱码问题就会得到解决;再则可能就是遇到加密了,需要更深研究下。

Python

我来吐槽

*

*