请教各位大神爬虫编码问题

vp_niklaus 2017-11-08 06:31:31
代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-

import urllib,urllib2
import sys


page = 1
url = 'http://www.qiushibaike.com/hot/page/1' + str(page)
user_agent = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36'
headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch, br',
'Accept-Language':'zh-CN,zh;q=0.8',
'AlexaToolbar-ALX_NS_PH':'AlexaToolbar/alx-4.0',
'Cache-Control':'max-age=0',
'Connection':'keep-alive',
'Cookie':'_xsrf=2|242ca447|bd506c7f8bc26e48eae656ed4c19d099|1510131460',
'Host':'www.qiushibaike.com',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36',
}

try:
request = urllib2.Request(url,headers = headers)
reponse = urllib2.urlopen(request)
c = reponse.read()
print c

except urllib2.URLError, e:
if hasattr(e,"code"):
print e.code
if hasattr(e,"reason"):
print e.reason
运行后爬了一堆乱码,改为c = reponse.read().decode('utf-8')后报错,如下:

网上找了很多帖子也不知道怎么解决
...全文
110 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
CaiNiaoWuZui 2017-11-09
  • 打赏
  • 举报
回复
response的编码不一定就是utf-8,直接decode('utf-8')能不出错吗? 我用的python3。 先判断response.encoding 的类型,再decode。 如果response.encoding已经是utf-8,那就直接response.text就可以了,不需解码 如果response.encoding是ISO-8859-1 (网页源码显示为charset = gb2312 或 gbk),那就response.content.decode(encoding='gb18030') ********************************** 如果puthon2没有response.encoding,楼主可以先查看网页源码charset ,如果网页源码没有charset,那么试着用chardet判断一下编码, 只要是charset = gb2312,或者 gbk,就用reponse.read().decode(encoding='gb18030') 如果是charset = utf-8 , 就用reponse.read().decode('utf-8')
vp_niklaus 2017-11-09
  • 打赏
  • 举报
回复
引用 4 楼 CaiNiaoWuZui 的回复:
原来是爬qiushibaike啊,我之前有回答爬取这个网址相关,我用python3测试过。没有问题 我看了下,原来是你headers加了这个: 'Accept-Encoding':'gzip, deflate, sdch, br', 这个是接收gzip压缩的,去掉即可。 如果你不去掉,需要先解压
哦哦可以了多谢多谢
CaiNiaoWuZui 2017-11-09
  • 打赏
  • 举报
回复
原来是爬qiushibaike啊,我之前有回答爬取这个网址相关,我用python3测试过。没有问题 我看了下,原来是你headers加了这个: 'Accept-Encoding':'gzip, deflate, sdch, br', 这个是接收gzip压缩的,去掉即可。 如果你不去掉,需要先解压
vp_niklaus 2017-11-09
  • 打赏
  • 举报
回复
引用 2 楼 CaiNiaoWuZui 的回复:
response的编码不一定就是utf-8,直接decode('utf-8')能不出错吗?
我用的python3。
先判断response.encoding 的类型,再decode。
如果response.encoding已经是utf-8,那就直接response.text就可以了,不需解码
如果response.encoding是ISO-8859-1 (网页源码显示为charset = gb2312 或 gbk),那就response.content.decode(encoding='gb18030')
**********************************
如果puthon2没有response.encoding,楼主可以先查看网页源码charset ,如果网页源码没有charset,那么试着用chardet判断一下编码,
只要是charset = gb2312,或者 gbk,就用reponse.read().decode(encoding='gb18030')
如果是charset = utf-8 , 就用reponse.read().decode('utf-8')

您好,网站的charset是UTF-8,如下图

37,717

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧