免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 13857 | 回复: 4
打印 上一主题 下一主题

python3 httplib2库抓下来的网站中文显示不正常 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-09 11:39 |只看该作者 |倒序浏览

这是我使用的代码:
  1. #coding:utf-8
  2. import httplib2

  3. def fetch(url):
  4.         http_header = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1',
  5.         'Referer':'http://www.baidu.com/',
  6.         'Host':'baidu.com'}

  7.         h = httplib2.Http('.cache')
  8.        
  9.         print ("Start downloading data....")
  10.         response, content = h.request(url,headers = http_header)
  11.         print ("Finish downloading data...")

  12.         print(response['-content-encoding'])

  13.         try:
  14.                 with open('baidu.html',"w") as dig:
  15.                         print(content,file = dig)
  16.         except IOError as err:
  17.                 print('File error: ' + str(err))               

  18. if __name__ == "__main__":
  19.         fetch("http://www.baidu.com/")
复制代码
这是返回的baidu.html文件的部分内容:
  1. url(\'http://www.baidu.com/img/shadu_7b9f89289d791938dc0eb5d94a0ad4d2.png\');background-repeat:no-repeat;padding:2px 0 2px 23px;" data-linkid="3">\xe8\xae\xa9\xe4\xb8\x8a\xe7\xbd\x91\xe6\x9b\xb4\xe5\xae\x89\xe5\x85\xa8\xef\xbc\x8c\xe7\xab\x8b\xe5\x8d\xb3\xe4\xb8\x8b\xe8\xbd\xbd\xe7\x99\xbe\xe5\xba\xa6\xe6\x9d\x80\xe6\xaf\x92</a></p></div></div><div id="ftCon"><div id="ftConw"><p ><a id="seth" onClick="h(this)" href="/" onmousedown="return ns_c({\'fm\':\'behs\',\'tab\':\'homepage\',\'pos\':0})">\xe6\x8a\x8a\xe7\x99\xbe\xe5\xba\xa6\xe8\xae\xbe\xe4\xb8\xba\xe4\xb8\xbb\xe9\xa1\xb5</a><a id="setf" href="http://www.baidu.com/cache/sethelp/index.html"
复制代码
其中中文内容全部变成了\xe8\xae\xa9\xe4\xb8\x8a\xe7\xbd\x91\xe6\x9b\xb4\xe5\xae\x89\xe5\x85\xa8 这样的东西

论坛徽章:
1
子鼠
日期:2014-05-04 13:59:31
2 [报告]
发表于 2014-01-09 11:44 |只看该作者
  1. >>> print "\xe8\xae\xa9\xe4\xb8\x8a\xe7\xbd\x91\xe6\x9b\xb4\xe5\xae\x89\xe5\x85\xa8".decode('utf8')
  2. 让上网更安全
复制代码

论坛徽章:
0
3 [报告]
发表于 2014-01-09 11:52 |只看该作者
回复 2# 修杰_JIANG


    感谢解答,但亲你给的代码在python2.7中可以正常运行,但是python3中提示错误
  1. >>> print ("\xe8\xae\xa9\xe4\xb8\x8a\xe7\xbd\x91\xe6\x9b\xb4\xe5\xae\x89\xe5\x85\xa8".decode('utf8'))
  2. Traceback (most recent call last):
  3.   File "<stdin>", line 1, in <module>
  4. AttributeError: 'str' object has no attribute 'decode'
复制代码
而且不是说python3 没有中文乱码的问题了吗?为什么我这还是乱码?以前完全没基础,所以问题很傻希望谅解呀……

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
4 [报告]
发表于 2014-01-09 12:57 |只看该作者
本帖最后由 timespace 于 2014-01-09 13:05 编辑

即使发展到Python30也挡不住人犯错误啊,而且这也不是乱码,只是你不认识。python3的字节流(bytes)和字符串(str)是严格区分的,看你的例子应该是bytes
  1. >>> type("\xe8\xae\xa9\xe4\xb8\x8a\xe7\xbd\x91\xe6\x9b\xb4\xe5\xae\x89\xe5\x85\xa8")
  2. <class 'str'>
  3. >>> type(b"\xe8\xae\xa9\xe4\xb8\x8a\xe7\xbd\x91\xe6\x9b\xb4\xe5\xae\x89\xe5\x85\xa8")
  4. <class 'bytes'>
  5. >>> str(b"\xe8\xae\xa9\xe4\xb8\x8a\xe7\xbd\x91\xe6\x9b\xb4\xe5\xae\x89\xe5\x85\xa8", "utf-8")
  6. '让上网更安全'
  7. >>> bytes('让上网更安全', 'utf-8')
  8. b'\xe8\xae\xa9\xe4\xb8\x8a\xe7\xbd\x91\xe6\x9b\xb4\xe5\xae\x89\xe5\x85\xa8'
复制代码

论坛徽章:
0
5 [报告]
发表于 2014-01-14 15:44 |只看该作者
:wink: 学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP