import requests

from lxml import etree

import os

# etree解析网页并返回

def parse(url):

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

}

text = requests.get(url=url, headers=headers).text

html = etree.HTML(text)

return html

# 获取总页面数

def get_page(base_url):

html = parse(base_url)

pages = html.xpath('//div[@class="main"]//div[@class="pages"]/div/a[@class="num"][last()]/text()')[0]

return pages

# 获取每页超链接的url

def get_a_url(page_url):

html = parse(page_url)

a_url = html.xpath('//div[@class="w1180 clearfix"]//div[@class="tab_tj"]//ul[@class="clearfix"]//a/@href')

return a_url

#  获取每个超链接对应图片组的个数

def get_img_count(a_url):

html = parse(a_url)

img_count = len(html.xpath('//ul[@id="scroll"]/li'))

return img_count

# 获取每个超链接对应图片组的个数的url

def get_img_url(img_page_url):

html = parse(img_page_url)

img_url = html.xpath('//img[@class="pic-large"]/@src')[0]

return img_url

# 保存图片

def save_img(img_url, name):

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

}

img_name = img_url.split('/')[-1]

res = requests.get(url=img_url, headers=headers)

img_data = res.content

if not os.path.isdir(f'.\\{name}_img'):

os.mkdir(f'.\\{name}_img')

with open(f'.\\{name}_img\\{img_name}', 'wb') as f:

f.write(img_data)

# 主函数

def main():

name = input("请输入想要下载的爱豆姓名:")

pinyin = input("请输入对应的汉语拼音:")

# 蔡徐坤是例外,单独处理

if name == '蔡徐坤':

pinyin = 'Angy'

base_url = f'http://www.win4000.com/mt/{pinyin}.html'

# 获取总页面数

try:

page_count = get_page(base_url)

except:

print("没有找到您的爱豆,要不换一个下载试试^_^")

exit()

# 获取用户想要下载的页面数

try:

page_num = int(input(f"爬取到该爱豆图片共【{page_count}】页,请输入想要下载的页数:"))

except:

print("输入数字都能错???,搁这玩我呢…………")

exit()

# 判断用户输入是否合法

if page_num > int(page_count) or page_num < 1:

print(f"你想上天啊,总共就 {page_count} 页,你输 {page_num} 想死啊 %¥#&……*&$^")

else:

try:

# 遍历下载页面

for i in range(1, page_num+1):

page_url = f'http://www.win4000.com/mt/{pinyin}_{str(i)}.html'

a_url_list = get_a_url(page_url)

print(f"第【{i}】页获取成功" + '\n')

a_url_list_len = len(a_url_list)

print(f"第【{i}】页共有[{a_url_list_len}]组图片")

a_count = int(input(f"你想下载第【{i}】页多少组图片呢?"))

# 遍历每页的每组图片

for group in range(a_count):

# 获取每页对应图片组的个数

img_count = get_img_count(a_url_list[group])

print(f"第【{i}】页第[{group+1}]组图片爬取中……" + '\n')

# 遍历每个组对应图片的url

for j in range(1, img_count+1):

img_page_url = os.path.splitext(a_url_list[group])[0] + f'_{j}' + os.path.splitext(a_url_list[group])[1]

img_url = get_img_url(img_page_url)

print(f"第【{i}】页第[{group+1}]组图片下载成功,正在保存该组第 {j} 张图片")

save_img(img_url, name)

print(f"第【{i}】页第[{group+1}]组图片保存成功" + "o(*^@^*)o" + '\n')

print(f"第【{i}】页下载完成" + "`(*>﹏

print(f"您的爱豆 {name} 图片 {page_num} 页下载完成,图片保存在当前文件夹下的 {name}_img 文件夹下")

input("按回车退出程序")

except:

print("未知错误,爬取失败。。。")

exit()

main()

python 生成exe 图片资源_爱豆图片下载(含源码及打包exe可执行文件)相关推荐

  1. 一起用python做个炫酷音乐播放器【V3.0含源码及打包exe】

    前言 熟悉的小伙伴都知道,前段时间写了一篇关于音乐播放器的文章–Python自制一款炫酷音乐播放器.不少小伙伴私信我,对播放器提了一些改进建议,对播放器的一些逻辑bug优化完善.今天音乐播放器3.0版 ...

  2. python程序员专用壁纸_程序员炫技必备:用Python生成马赛克画!(文末附源码)...

    原标题:程序员炫技必备:用Python生成马赛克画!(文末附源码) 源 | Python与数据分析文 | 强哥 大家知道马赛克画是什么吗?不是动作片里的马赛克哦~~ 马赛克画是一张由小图拼成的大图,本 ...

  3. python爬虫05 - BeautifulSoup4的安装,下载,源码简介,使用。

    1. bs4简介 1.1 基本概念 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的网页信息提取库 1.2 源码分析 • github下载源码 • 安装 • pip inst ...

  4. 【Python】【Tkinter】png转ico小工具源码以及打包exe

    我最近初学Python,学习到了Thinker部分,心血来潮做了一个图片小工具,我感觉我自己好像是码了一座屎山.下面我分几个部分来讲解一下我的思路,以及具体的步骤. 第一步,先看源码: 部分地方我作了 ...

  5. Qt creator5.7 OpenCV249之图片旋转(含源码下载)

    下面先来介绍OpenCV关于图像选择的函数 void cv::flip( InputArray src OutputArray dst, int flipCode) src-是要处理的原始图像, ds ...

  6. Python实现多个excel文件合并源码及打包exe程序

    ##以下是源码filecombine.py,比较简单,有相应说明,也是结合别的代码自己修改的,用到的包需要提前装好. # -*- coding: utf-8 -*- import xlrd impor ...

  7. Qt creator5.7 OpenCV249之图片膨化(含源码下载)

    首先介绍几个OpenCV的函数 void cv::dilate( inputArray src, outputArray dst, inputArray kernel, Point anchor=Po ...

  8. Qt creator5.7 OpenCV249之图片腐化(含源码下载)

    首先介绍几个OpenCV的函数 void cv::erode( InputArray src, OutputArray dst, InputArray kernel, Point anchor=Poi ...

  9. Python制作的一款小软件(含源码)

    运行示意图 程序下载百度云链接 上传CSDN是要下载币的,所以保存在百度云用于共享. 链接:https://pan.baidu.com/s/1-h7ovLMxOVLdVcMiJOknvA 提取码:5a ...

最新文章

  1. Ubuntu系统环境变量配置文件(转)
  2. JAVA 利用SimpleDateFormat将String转换为格式化的日期
  3. oracle slient静默安装并配置数据库及仅安装数据库不配置数据库shell
  4. linux系统中 库分为静态库和,Linux系统中“动态库”和“静态库”那点事儿-【经典好文】...
  5. java scrollpane放按钮_java – 如何在BoxLayout上放置scrollPane?
  6. 5.修改本地库/远程仓库的地址
  7. android 修复工具下载,安卓数据恢复软件(FonePaw for Android)
  8. 增长量计算n+1原则_我是如何快速做资料分析的?(二)
  9. 如何在微信分享的网页中显示描述和图片
  10. Excel 给一列数据前批量添加字符
  11. java计算机毕业设计广东省梅州市宇恒节能科技有限公司(附源码、数据库)
  12. plop-template
  13. graphpad柱状图怎么加图例_科研绘图教程| 如何用Graphpad Prism绘制超复杂组合图?...
  14. MATLAB | 面积图、饼状图、水平柱状图的斜线填充(阴影填充)
  15. python翻译-Python翻译器
  16. 淮南计算机竞赛培训,关于公布2019年田家庵区中小学电脑制作比赛等三项比赛评比结果的通知...
  17. 关键词SEO排名优化的对策与流程
  18. 减肥的第3天 (想吃——柳州螺蛳粉 + 虎皮鸡脚 + 虎皮猪脚 + 七寸)
  19. html5如何插入avi视频,GIF Movie Gear
  20. php服务软件安装?宝塔服务器配置搭建一键完成

热门文章

  1. iOS中文件连接群晖服务器,教你使用群晖怎么在ios的“家庭‘’App(HomeKit)里添加Hom...
  2. 幼儿-综合素质【5】
  3. 【微信小程序】微信小程序提示Do not have handler in component
  4. 一个围绕中心点旋转的动画效果
  5. 中国房地产还能火多久?
  6. 前端----HTML 制作QQ空间练习
  7. v-model双向绑定原理
  8. 4部网页配色电子书库之第4部——网站配色方案赏析
  9. 分布式服务器框架之Servers.Core库实现 DES对称加密算法;SHA1信息摘要算法;MD5信息摘要算法
  10. c语言初阶(2-函数-上篇)