首页 > IT职业 > IT生活 > Python应用开发——爬取网页图片
# 第一版
#-*-coding:utf-8-*-
import os
import re
import time
import requests
import bs4
from bs4 import BeautifulSoup
# 手动写入目标套图的首页地址
download_url = "https://www.xgmn09.com/XiaoYu/XiaoYu23172.html"
# 手动写入目标套图的页数
page_num = 25
# 创建一个文件夹用来保存图片
file_name = " 测试图库 "
# 目标图片下载地址的前半部分 ( 固定不变那部分,后半段是变化的,需要解析网页得到 )
imgae_down_url_1 = "https://jpxgyw.net"
# 创建文件夹
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 = 跟单网gendan5.comstr(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 = 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))) + " 张图片 ")
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946337/viewspace-2915598/ ,如需转载,请注明出处,否则将追究法律责任。