返回信息流问题如下:
准备写个爬虫,爬取某个网页,然后将读取到的网页类容存到一个.html文件中,
刚开始这样写,不行会报错
content = urllib.request.urlopen(my_url).read()
open(filename,'w').write((content)
#TypeError: must be str, not bytes
然后改成:
content = urllib.request.urlopen(my_url).read()
open(filename,'w').write(str(content)
不报错了,但是打开html时全是xe/xb/之类的东西
然后又改成
content = urllib.request.urlopen(my_url).read()
open(filename,'w').write((content).decode('utf-8'))
打开html后全是一些黑色的菱形,里面还有个问号。
请教下,应该如何解决这个问题呢?
这是一条镜像帖。来源:北邮人论坛 / python / #3841同步于 2014/10/25
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
关于Python3中urllib.request.urlopen(my_url).read()后得到的
chenxixi
2014/10/25镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
open(filename,'w').write((content).decode('utf-8'))
改成
open(filename,'w').write((content).decode('gbk'))
能不能给我解释一下为啥要这样改呢?而之前的为啥又不对呢[ema23]
【 在 asif12 的大作中提到: 】
: open(filename,'w').write((content).decode('utf-8'))
: 改成
: open(filename,'w').write((content).decode('gbk'))
提示我
UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 254: illegal multibyte sequence
【 在 asif12 的大作中提到: 】
: open(filename,'w').write((content).decode('utf-8'))
: 改成
: open(filename,'w').write((content).decode('gbk'))
decode里再传一个参,写成decode('utf-8','ignore')。愿意的话你可以不decode直接输出看看,全是比特码
【 在 chenxixi 的大作中提到: 】
提示我
UnicodeDecodeError: 'gb...
【 在 chenxixi 的大作中提到: 】
: 问题如下:
: 准备写个爬虫,爬取某个网页,然后将读取到的网页类容存到一个.html文件中,
: 刚开始这样写,不行会报错
: ...................
(没注意是python3)
content = urllib.request.urlopen(my_url).read()
with open(filename,'wb') as f:f.write(content)
python3 read()得到的是b"....",二进制的,直接保存成二进制
decode的话看源码是什么编码
<!DOCTYPE html><html><head><meta charset="GBK"><meta name="keywords" content="北邮人论坛,北邮人,BYR,nforum,北京邮电大学,北邮,BUPT,论坛,BBS,xw2423" /><meta name="description" content="北京邮电大学BBS" />
这就要decode('gbk','ignore')
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
如果是这样呢?
(你那个史在审查元素里面看到的吧?)
【 在 asif12 的大作中提到: 】
: (没注意是python3)
: content = urllib.request.urlopen(my_url).read()
: with open(filename,'wb') as f:f.write(content)
: ...................
open(filename,'wb').write((content).decode('utf-8','ignore'))
TypeError: 'str' does not support the buffer interface
不知道为什么会这样,不过去掉后面的decode就行
【 在 asif12 的大作中提到: 】
: 那就decode('utf-8','ignore')就没问题