python爬虫编码问题

跟着教程写了个爬虫,结果爬到的中文都是乱码的,应该怎么解决

python代码

from __future__ import unicode_literals 
#-*-coding:utf-8-*-
import requests
from bs4 import BeautifulSoup
res = requests.get('http://news.sina.com.cn/china/')
res.encoding='utf-8'
soup=BeautifulSoup(res.text,'html.parser')
for news in soup.select('.news-item'):
    if len(news.select('h2'))>0:
        h2=news.select('h2')[0].text
        a=news.select('a')[0]['href']
        print(h2,a)

爬取结果:

(u'u539fu56fdu52a1u9662u5b98u5458uff1au804cu5de5u65e9u9000u4f11u53bbu8df3u5e7fu573au821eu662fu6d6au8d3
9', u'http://news.sina.com.cn/c/sd/...')
(u'u4e2du56fdu8239u5458u88abu7d22u9a6cu91ccu6d77u76d7u52abu63011671u5929 u79f0u4e0du518du51fau6d77', u'h
ttp://news.sina.com.cn/o/2016-10-29/doc-ifxxfysn8035051.shtml')
(u'u6cb3u5317u6cb3u5357u4f1au8baeu8d39u65b0u89c4uff1au4e00u7c7bu4f1au8baeu6bcfu4ebau6bcfu5929600u5143',
u'http://news.sina.com.cn/c/201...')
(u'u4e2du7eaau59d4u53cdu8150u7247u66ddu514977u540du5b98u5458 u6709u526fu56fdu7ea7u6709u6751u4e3bu4efb',
u'http://news.sina.com.cn/c/sd/...')

阅读 6k
8 个回答

试试不用元组

print h2, a

应该还是遗留的编码问题

print的时候实际上调用了tuple的__str__()

>>> h = u'你好'
>>> (h, 8).__str__()
"(u'\\u4f60\\u597d', 8)"

编码方式不同造成,windows平台的编码一般是gbk过着isoxxx,查阅一下web的编码方式(chrome可查阅),然后将编码转为系统一致就ok了

其实单独输出h2是可以输出中文的,非要向你那样输出元组的话,参考下面代码

from __future__ import unicode_literals
#-*-coding:utf-8-*-
import requests
from bs4 import BeautifulSoup
res = requests.get('http://news.sina.com.cn/china/')
res.encoding='utf-8'
soup=BeautifulSoup(res.text,'html.parser')
for news in soup.select('.news-item'):
    if len(news.select('h2'))>0:
        h2=news.select('h2')[0].text
        a=news.select('a')[0]['href']
        test = str((h2, a))
        print(test.decode("unicode-escape"))

遇到编码问题,还要是理解编码的历史渊源是是什么,可以看看这篇文章, http://foofish.net/python-cha... 以后遇到编码了就知道如何分析问题了。

u''开头说明已经是unicode了,编码没有问题,只是你print的方式有问题,2.7的话改成这样应该就没问题了

print '%s,%s'%(h2, a)
新手上路,请多包涵

读出来之后 直接转化为字符串就可以了

print(h2 + a)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题