我刚刚开始学习Python,但是当我想写一个工具来帮助我下载在线书籍“学习Vimscript的艰难之路”,我有一个问题。你知道吗
这是我的代码;版本是py3.5
:
#coding: utf-8
import urllib.request
import re
url = 'http://learnvimscriptthehardway.stevelosh.com'
name = '/chapters/16.html'
while(len(name) != 0):
url1 = url + name
print(url1)
response = urllib.request.urlopen(url1)
vim = response.read().decode('utf-8')
address = "/Users/zhangzhimin/learnvimthehardway/" + name[-2:] + ".html"
with open(address, "w") as f:
f.write(vim)
print("%s finish" % name)
x = re.findall('''<a class="next" href="(.+?)"''', vim)
name = x[0]
结果如下:
:!python3 test.py
http://learnvimscriptthehardway.stevelosh.com/chapters/16.html
/chapters/16.html finish
http://learnvimscriptthehardway.stevelosh.com/chapters/17.html
Traceback (most recent call last):
File "test.py", line 11, in <module>
vim = response.read().decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte
我不知道为什么会这样:我可以下载第16章并解码它,但我不能对第17章做同样的事情。你知道吗
最后我解决了这个问题,事实上,除了 考虑到
gzip
,我应该认为提醒我:在代码中使用gzip模块后,一切正常。你知道吗
请参阅有效的示例:
不过,我使用的是python2.7.10。 这段代码从您指定的url下载html格式的所有章节。 注意:替换目录的“./vim/”(当前目录+vim);我使用了name[-7:],它是最后7个字符,如“16.html”等等。条件“if”(if x:…)排除“索引超出范围”错误。你知道吗
相关问题 更多 >
编程相关推荐