不得使用本软件发布违反国家法律的非法广告信息,如色情,赌博等,其造成的一切后果与本作者无关 请自觉营造和谐良性的网络营销环境 违法行为一经发现 ,本作者有权终止服务并追究法律责任 本工具仅用于测试学习使用 本网站有部分内容来自互联网,如无意中侵犯了哪个媒体 、公司 、企业或个人等的知识产权,请来电或致函告之,本网站将在规定时间内给予删除等相关处理,若有涉及版权费等问题,请及时提供相关证明等材料并与我们联系,通过友好协商公平公正原则处理纠纷。
import re
import requests
from bs4 import BeautifulSoup
import os
from multiprocessing import Pool
import multiprocessing
import time
import sys # 导入sys模块
#
sys.setrecursionlimit(3000) # 将默认的递归深度修改为3000
src_re = re.compile(r'<img .*? src="(.*?)" .*?/>')
title_re = re.compile(r'<img .*? title="(.*?)"/>')
proxies = {"https": None, 'http': None}
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 7.0; Win64; x64) AppleWebKit/4444.36 (KHTML, like Gecko) Chrome/96.0.4692.99 Safari/537.36 Edg/97.0.3333.69"
}
def saveFile(title, src, file_path):
'''
保存图片文件
:param title: 图片名称
:param src: 图片线上访问
:param path: 图片保存到的文件夹地址
'''
image_data = requests.get(src, headers=headers, proxies=proxies).content
image_path = file_path + '/' + title + '.jpg'
with open(image_path, 'wb') as fp:
fp.write(image_data)
print("图片【", title, "】 下载成功!!")
def getData(item, file_path):
href = 'https://pic.netbian.com' + item['href']
# 进入详情
response_text_images = requests.get(url=href, headers=headers, proxies=proxies).text
bs_images = BeautifulSoup(response_text_images, 'html.parser')
image_text = bs_images.find('a', id='img').encode('iso-8859-1').decode('gbk')
src = 'https://pic.netbian.com' + re.findall(src_re, image_text)[0]
title = re.findall(title_re, image_text)[0]
return {"src": src, 'title': title, 'file_path': file_path}
def findSrc(src_url, page, category, types, file_path):
print("types:", types[category])
p = Pool(20)
"""
查找图片地址
:param src_url: 访问地址
:param page: 下载的页数
:param category: 类型
:param types: 类型列表
:param file_path: 类型列表
"""
list_all = []
for index in range(1, page + 1):
if index != 1:
src_new_url = src_url.format(type=types[category], prefix="_", index=str(index))
else:
src_new_url = src_url.format(type=types[category], prefix='', index='')
print(src_new_url)
response_text = requests.get(url=src_new_url, headers=headers, proxies=proxies).text
bs = BeautifulSoup(response_text, 'html.parser')
for item in bs.find("ul", class_='clearfix').find_all('a'):
list_all.append(item)
temp_list = []
for item in list_all:
temp_list.append((item, file_path))
res = p.starmap_async(getData, temp_list)
p.close()
p.join()
return res.get('value')
if __name__ == '__main__':
multiprocessing.freeze_support()
try:
print("###################### 不得使用本软件发布违反国家法律的非法广告信息 ######################")
print("###################### 如色情,赌博等,其造成的一切后果与本作者无关 ######################")
print("###################### 请自觉营造和谐良性的网络营销环境 ######################")
print("###################### 违法行为一经发现 ######################")
print("###################### 本作者有权终止服务并追究法律责任 ######################")
print("###################### 本工具仅用于测试学习使用 ######################")
print("######################### 图片类型选择 ########################")
print("类型1:4K风景图片")
print("类型2:4K美女图片")
print("类型3:4K游戏图片")
print("类型4:4K动漫图片")
print("类型5:4K影视图片")
print("类型6:4K汽车图片")
print("类型7:4K动物图片")
print("类型8:4K人物图片")
print("类型9:4K美食图片")
print("类型10:4K宗教图片")
print("类型11:4K背景图片")
print("类型12:4K手机壁纸图片")
print("类型13:最新图片")
types = (
'4kfengjing', '4kmeinv', '4kyouxi', '4kdongman', '4kyingshi', '4kqiche', '4kdongwu', '4krenwu', '4kmeishi',
'4kzongjiao', '4kbeijing', 'shoujibizhi', 'new')
print("######################################", types[2])
category = input('请输入需要下载的类别数字(例如【4K风景图片】输入 1 ): ')
page_size = int(input("请输入需要下载的页数: "))
category = int(category) - 1
print("######################################", category)
file_path = types[category]
print("##################################################")
# 判断文件夹是否存在
if not os.path.exists('./' + file_path):
# 创建文件夹
os.mkdir('./' + file_path)
url = 'https://pic.netbian.com/{type}/index{prefix}{index}.html'
print('链接解析中,请稍后.............')
parse_start_time = time.time()
images_list = findSrc(url, page_size, category, types, file_path)
print('链接解析成功,用时:', time.time() - parse_start_time, '共有图片:', len(images_list), '张')
temp_list = []
for item in images_list:
temp_list.append((item.get('title'), item.get('src'), item.get('file_path')))
start_time = time.time()
pool = Pool(25)
pool.starmap_async(saveFile, temp_list)
pool.close()
pool.join()
end_time = time.time()
print('下载用时:', end_time - start_time)
except AttributeError:
print('解析失败,可能IP已被屏蔽!!')