人过留名, 雁过留声
人生天地间,凡有大动静处
必有猪头
问题
想写个简单的脚本,爬取网页的内容,结果返回一堆 HTML 代码,杂乱无章,很是难受。
① 源码
说明:python 3 细分了 urllib 模块,需要调用 urllib.request,而 python 2 只需要调用 urllib 模块即可。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib.request
u = urllib.request.urlopen('http://www.baidu.com')
u = u.read()
print(u)
② 结果
换行符都没识别出来。。。
研究一下
先看看当前的 u 是什么类型的变量。
print(type(u))
果然,是 byte 类型,不是 str 类型,所以 \n 没被当成换行符打印出来。
用 decode() 解码一下
u = u.read().decode()
print(type(u))
结果转换成了 str 类型,打印试试看效果
以上的错误大概意思就是说 gbk 的编码形式没法去对 ‘\xbb’ 进行编码,经过了解之后发现这是 python 默认编码的局限,改变标准输出的默认编码即可。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import io,sys
import urllib.request
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030') #改变标准输出的默认编码
u = urllib.request.urlopen('http://www.baidu.com')
u = u.read().decode()
print(u)
encoding = ‘utf-8’ 的话中文的编码会有错误。
encoding = ‘gb18030’ 中文回显正确
猪头
2020.1.14