分类: Python/Ruby
2022-09-21 13:58:27
# 第一版
#-*-coding:utf-8-*-
import os
import re
import time
import requests
import bs4
from bs4 import BeautifulSoup
# 手动写入目标套图的首页地址
download_url = ""
# 手动写入目标套图的页数
page_num = 25
# 创建一个文件夹用来保存图片
file_name = "测试图库"
# 目标图片下载地址的前半部分(固定不变那部分,后半段是变化的,需要解析网页得到)
imgae_down_url_1 = ""
# 创建文件夹
def CreateFolder(file):
"""创建存储数据文件夹"""
flag = 1
while flag == 1: # 若文件已存在,则不继续往下走以免覆盖了原文件
if not os.path.exists(file):
os.mkdir(file)
flag = 0
else:
print('该文件已存在,请重新输入')
flag = 1
time.sleep(1)
# 返回文件夹的路径,这里直接放这工程的根目录下
path = os.path.abspath(file) + "\\"
return path
# 下载图片
def DownloadPicture(download_url, list, path):
# 访问目标网址
r = requests.get(url=download_url, timeout=20)
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text, "html.parser")
# 解析网址,提取目标图片相关信息,注:这里的解析方法是不固定的,可以根据实际的情况灵活使用
p = soup.find_all("p")
tag = p[0].find_all("img") # 得到该页面目标图片的信息
# 下载图片
j = 0
for i in range(list, list + 3):
if(j < len(tag) and tag[j].attrs['src'] != None) :
img_name = str(i) + ".jpg" # 以数字命名图片,图片格式为jpg
# 获取目标图片下载地址的后半部分
imgae_down_url_2 = tag[j].attrs['src']
j = j + 1
# 把目标图片地址的前后两部分拼接起来,得到完整的下载地址
imgae_down_url = imgae_down_url_1 + imgae_down_url_2
print("imgae_down_url: ", imgae_down_url)
# 下载图片
try:
img_data = requests.get(imgae_down_url)
except:
continue
# 保存图片
img_path = path + img_name
with open(img_path,'wb') as fp:
fp.write(img_data.content)
print(img_name, " ******下载完成!")
# 主函数
if __name__ == "__main__":
# 创建保存数据的文件夹
path =外汇跟单gendan5.com CreateFolder(file_name)
print("创建文件夹成功: ", path)
# 按页下载图片
for i in range(0, page_num):
if i == 0 :
page_url = download_url # 首页网址,注:因为这个网站首页和后面那些页面网址的规则不一样,所以这里要区分开来
else :
page_url = download_url[:-5] + "_" + str(i) + ".html" # 第2页往后的网址,都是用数字来排布页面
# 下载图片
# print("page_url: ", page_url)
DownloadPicture(page_url, i * 3, path) # 注:这个网站每一页最多是3张图片,每张图片我都用数字命名
print("全部下载完成!", "共" + str(len(os.listdir(path))) + "张图片")