0
点赞
收藏
分享

微信扫一扫

python3(urlopen)获取网页的坑


首先,python2和python3在导入urlrequest的方式都不一样。
python2是这样:​​​import urllib2​​​
而python3里面把urllib分开了,分成了urlrequest和urlerror,在这里我们只需导入urlrequest即可。​​​from urllib.request import urlopen​

然后直接放代码跟着代码讲吧,这个是正确的例子:

from urllib.request import urlopen
html = urlopen("http://tieba.baidu.com/")
content = html.read().decode('utf-8')
f = open('tieba.html','w',encoding='utf-8')
f.write(content)
f.close()

可以看到​​content=html.read().decode('utf-8')​​这一句,网上看的全都没有加decode,当我在将其保存进文件时就会提示,不能将byte类型的以str形式存入。

TypeError: write() argument must be str, not bytes

当然看到这个错误之后第一想法就是将下面的write函数的参数改成​​write(str(content))​​​
这么做确实没报错了,但是打开文件后会发现,完全是乱码啊,而且以html格式打开也都是​​​\t\n​​ 之类的乱码。

但是加上decode后就没这个问题啦!!

BUT会有新问题产生
接下来如果参照网上的例子,大多是这样​​​f =open('tieba.html','w')​​,没有encoding,这又会报错:

UnicodeEncodeError: 'gbk' codec can't encode character '\u2022' in position 81636: illegal multibyte sequence

这是因为电脑会默认创建gbk编码的文件,而出于不知名原因存入utf-8编码的文件时就会无法编码,因此只能在open后面设置编码,这样在新创建一个文件的时候就会创建的是utf-8编码的文件了。

如此,才算是正是解决问题。

附一张下载下来运行的图:

python3(urlopen)获取网页的坑_urlopen

python2和3之间差别还是不小的,而且诸多细节网上的教程并未说清,还得自己多研究呀。




举报

相关推荐

0 条评论