|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近买了小甲鱼老师的书籍看到爬虫这一章节时有一个例子,我觉得有一个bug,但是不知道怎么解决(自认为有bug):
题目:爬取 http://jandan.net/ooxx/ 这个网站的jpg图片时出现的一个bug。
先贴程序:
- #!/usr/bin/env python
- #coding:utf-8
- import urllib.request
- import os
- def url_open(url):
- req = urllib.request.Request(url)
- req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36')
- res = urllib.request.urlopen(req)
- html = res.read()
- return html
- def get_page(url):
- html = url_open(url).decode('utf-8')
- a = html.find('current-comment-page') + 23
- b = html.find(']',a)
- # print(html[a:b])
- return html[a:b]
- def find_image(url):
- html = url_open(url).decode('utf-8')
- img_addr = []
- a = html.find('img src=')
- while a != -1:
- b = html.find('.jpg',a,a+255)
- if b != -1:
- img_addr.append(html[a+11:b+4])
- else:
- b = a + 9
- a = html.find('img src=//',b)
- return img_addr
- def save_img(img_addr):
- for each in img_addr:
- filename = each.split('/')[-1]
- print(filename)
- with open(filename,'wb') as f:
- url = 'http://' + each
- img = url_open(url)
- f.write(img)
- def download_mm(folder='C:\\Users\\Pictures\\network_picture',pages=30):
- if not os.path.exists(folder):
- os.mkdir(folder)
- os.chdir(folder)
- url = 'http://jandan.net/ooxx/'
- page_num = int(get_page(url))
- for i in range(pages):
- page_num -= i
- page_url = url + 'page-' + str(page_num) + '#comments'
- img_addr = find_image(page_url)
- save_img(img_addr)
- if __name__ == '__main__':
- download_mm()
复制代码
执行报错:
.....
File "C:\Python\Python36\lib\urllib\request.py", line 504, in _call_chain
result = func(*args)
File "C:\Python\Python36\lib\urllib\request.py", line 650, in http_error_default
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
上面的报错是基于pages 出现的。
根据断点调试以后,发现,当pages 小于15的时候就不会报错。
由于自己才学,经过不断的推敲,发现是 page_num -= i 这里有误,为什么呢?
假如 初始page_num = 208 ,range开始循环的时候,0,1,2,3,4,
那么page_num 的值是,208,207,205,202,198 193,......,-2 -23
但是 页的 pagesize 不存在 负数因此会报错。
所以应该是: page_num -= 1,而pages 只是用来循环访问多少个页面的次数。
(注释:前面一直报错没有想出来,但是后面在自己慢慢提问题,然后去研究的时候发现就是这里的问题,因此,分享出来给大家看看)
|
|