|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
- import urllib.request
- import os
- img_addrs = []
- def url_open(url):
- req = urllib.request.Request(url) # 请求网页 并 添加头部信息
- req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0')
- response = urllib.request.urlopen(url) # 伪装并打开网页
- html = response.read()
- def find_imgs(url):
- html = url_open(url).decode('utf-8') # 得到2进制解码为字符串 存入列表进行查找图片的相关位置
- '''
- a= html.find('img src=')
- b=html.find('.jpg',a,a+255) #后面参数为 限定查找范围 find 若有多个,只会返回第一个
- # 如果一页里面只有一张图 那么以下两行就够了
- if b!=-1: #若查找不到则会返回 -1
- img_addrs.append(html[a+9:b+4]) # a从i起后移9位是/ <img src="/uploads/allimg/210317/001935-16159115757f04.jpg" alt="猫羽雫 蓝色眼睛女子 尾巴 女孩子 猫耳 猫 可爱二次元动漫4k壁纸">
- '''
- # 多图查找
- a= html.find('img src=')
- while a !=-1:
- b = html.find('.jpg', a, a + 255)
- if b != -1: # 若查找不到则会返回 -1 这里只考虑了 jpg格式
- img_addrs.append(html[a + 9:b + 4]) # a从i起后移9位是/ <img src="/uploads/allimg/210317/001935-16159115757f04.jpg" alt="猫羽雫 蓝色眼睛女子 尾巴 女孩子 猫耳 猫 可爱二次元动漫4k壁纸">
- a= html.find('img src=',b) # 以上次b结束开始查
- b = html.find('.jpg', a, a + 255)
- return img_addrs
- def save_imgs(img_addrs):
- for each in img_addrs:
- filename=each.split('/')[-1]
- with open(filename,'wb') as f:
- img = url_open(each)
- f.write(img)
- def download_mm(folder='4k',pages=20): #文件名 爬取页数
- os.mkdir(folder) #新建文件夹
- os.chdir(folder) #更改工作目录 便于保存地址
- url = 'https://pic.netbian.com/4kdongman/' #获取总的 目标网页
- print(url)
- for i in range(pages):
- pages -= i
- if i == 0:
- page_url = url
- else:
- page_url= url +'index_'+str(i)+'.html' # 生成具体页数
- img_addrs = find_imgs(page_url) #当前页面的所有图片地址
- save_imgs(folder,img_addrs) #保存
复制代码
我改了至少5处bug,还添加了一个函数,大改了一段代码,现在可以用了:
- import urllib.request
- # 导入一个新函数
- from urllib.parse import urljoin
- import os
- # url放在外边让它是全局变量
- url = 'https://pic.netbian.com/4kdongman/' #获取总的 目标网页
- img_addrs = []
- def url_open(url):
- req = urllib.request.Request(url) # 请求网页 并 添加头部信息
- req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0')
- response = urllib.request.urlopen(url) # 伪装并打开网页
- html = response.read()
-
- # 这里要返回的
- return html
- def find_imgs(url):
- print(url)
- # 网页不完整导致的解码错误,加个参数就好了
- html = url_open(url).decode('utf-8', errors="ignore") # 得到2进制解码为字符串 存入列表进行查找图片的相关位置
- '''
- a= html.find('img src=')
- b=html.find('.jpg',a,a+255) #后面参数为 限定查找范围 find 若有多个,只会返回第一个
- # 如果一页里面只有一张图 那么以下两行就够了
- if b!=-1: #若查找不到则会返回 -1
- img_addrs.append(html[a+9:b+4]) # a从i起后移9位是/ <img src="/uploads/allimg/210317/001935-16159115757f04.jpg" alt="猫羽雫 蓝色眼睛女子 尾巴 女孩子 猫耳 猫 可爱二次元动漫4k壁纸">
- '''
- # 多图查找
- a= html.find('img src=')
- while a !=-1:
- b = html.find('.jpg', a, a + 255)
- if b != -1: # 若查找不到则会返回 -1 这里只考虑了 jpg格式
- img_addrs.append(html[a + 9:b + 4]) # a从i起后移9位是/ <img src="/uploads/allimg/210317/001935-16159115757f04.jpg" alt="猫羽雫 蓝色眼睛女子 尾巴 女孩子 猫耳 猫 可爱二次元动漫4k壁纸">
- a= html.find('img src=',b) # 以上次b结束开始查
- b = html.find('.jpg', a, a + 255)
- return img_addrs
- def save_imgs(img_addrs):
- for each in img_addrs:
- filename=each.split('/')[-1]
- with open(filename,'wb') as f:
- img = url_open(urljoin(url,each))
- f.write(img)
- def download_mm(folder='4k',pages=20): #文件名 爬取页数
-
- # 这里加个条件判断
- if not os.path.exists(folder):
- os.mkdir(folder) #新建文件夹
-
- os.chdir(folder) #更改工作目录 便于保存地址
- print(url)
- # 这里大改了
- index = get_index(pages)
- for page_url in index:
- img_addrs = find_imgs(urljoin(url,page_url)) #当前页面的所有图片地址
- # 这里多给了个参数
- save_imgs(img_addrs) #保存
- # 给你加了个函数
- def get_index(max_page):
- for i in range(int(max_page),0,-1):
- if i == 1:
- flag = ""
- else:
- flag = f"_{i}"
- yield f"index{flag}.html"
-
- download_mm()
复制代码
这要是没个最佳可不像话了。
顺便提一句你爬这么多预览图有什么意思啊,得爬原图啊。
|
|