马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 只是用来循环访问多少个页面的次数。
(注释:前面一直报错没有想出来,但是后面在自己慢慢提问题,然后去研究的时候发现就是这里的问题,因此,分享出来给大家看看)
|