> 在爬取网页的时候我们经常会遇到乱码,但是我们可以通过查看网页的源代码查看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这个字段,如果有,删除这个字段,乱码问题就会得到解决;再则可能就是遇到加密了,需要更深研究下。