鱼C论坛

 找回密码
 立即注册
查看: 2625|回复: 7

[技术交流] 爱豆图片下载(含源码及打包exe可执行文件)

[复制链接]
发表于 2020-12-23 09:53:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 太阳总会升起 于 2020-12-23 10:00 编辑


呦吼,俺在鱼兮发的第一个资源分享,还请各位大佬批评指正!!!

这个是爬取美桌壁纸http://www.win4000.com/)里面的明星图片板块,可以选择下载的页数及每页的组数
上代码


  1. import requests
  2. from lxml import etree
  3. import os


  4. # etree解析网页并返回
  5. def parse(url):
  6.     headers = {
  7.         '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'
  8.     }
  9.     text = requests.get(url=url, headers=headers).text
  10.     html = etree.HTML(text)

  11.     return html


  12. # 获取总页面数
  13. def get_page(base_url):
  14.     html = parse(base_url)
  15.     pages = html.xpath('//div[@class="main"]//div[@class="pages"]/div/a[@class="num"][last()]/text()')[0]

  16.     return pages


  17. # 获取每页超链接的url
  18. def get_a_url(page_url):
  19.     html = parse(page_url)
  20.     a_url = html.xpath('//div[@class="w1180 clearfix"]//div[@class="tab_tj"]//ul[@class="clearfix"]//a/@href')

  21.     return a_url


  22. #  获取每个超链接对应图片组的个数
  23. def get_img_count(a_url):
  24.     html = parse(a_url)
  25.     img_count = len(html.xpath('//ul[@id="scroll"]/li'))

  26.     return img_count


  27. # 获取每个超链接对应图片组的个数的url
  28. def get_img_url(img_page_url):
  29.     html = parse(img_page_url)
  30.     img_url = html.xpath('//img[@class="pic-large"]/@src')[0]

  31.     return img_url


  32. # 保存图片
  33. def save_img(img_url, name):
  34.     headers = {
  35.         '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'
  36.     }
  37.     img_name = img_url.split('/')[-1]
  38.     res = requests.get(url=img_url, headers=headers)
  39.     img_data = res.content
  40.     if not os.path.isdir(f'.\\{name}_img'):
  41.         os.mkdir(f'.\\{name}_img')
  42.     with open(f'.\\{name}_img\\{img_name}', 'wb') as f:
  43.         f.write(img_data)


  44. # 主函数
  45. def main():
  46.     name = input("请输入想要下载的爱豆姓名:")
  47.     pinyin = input("请输入对应的汉语拼音:")

  48.     # 蔡徐坤是例外,单独处理
  49.     if name == '蔡徐坤':
  50.         pinyin = 'Angy'
  51.    
  52.     base_url = f'http://www.win4000.com/mt/{pinyin}.html'
  53.     # 获取总页面数
  54.     try:
  55.         page_count = get_page(base_url)
  56.     except:
  57.         print("没有找到您的爱豆,要不换一个下载试试^_^")
  58.         exit()
  59.         
  60.     # 获取用户想要下载的页面数
  61.     try:
  62.         page_num = int(input(f"爬取到该爱豆图片共【{page_count}】页,请输入想要下载的页数:"))
  63.     except:
  64.         print("输入数字都能错???,搁这玩我呢…………")
  65.         exit()

  66.     # 判断用户输入是否合法
  67.     if page_num > int(page_count) or page_num < 1:
  68.         print(f"你想上天啊,总共就 {page_count} 页,你输 {page_num} 想死啊 %¥#&……*&$^")
  69.     else:
  70.         try:
  71.             # 遍历下载页面
  72.             for i in range(1, page_num+1):
  73.                 page_url = f'http://www.win4000.com/mt/{pinyin}_{str(i)}.html'
  74.                 a_url_list = get_a_url(page_url)
  75.                 print(f"第【{i}】页获取成功" + '\n')
  76.                 a_url_list_len = len(a_url_list)
  77.                 print(f"第【{i}】页共有[{a_url_list_len}]组图片")
  78.                 a_count = int(input(f"你想下载第【{i}】页多少组图片呢?"))
  79.                
  80.                 # 遍历每页的每组图片
  81.                 for group in range(a_count):
  82.                     # 获取每页对应图片组的个数
  83.                     img_count = get_img_count(a_url_list[group])
  84.                     print(f"第【{i}】页第[{group+1}]组图片爬取中……" + '\n')

  85.                     # 遍历每个组对应图片的url
  86.                     for j in range(1, img_count+1):
  87.                         img_page_url = os.path.splitext(a_url_list[group])[0] + f'_{j}' + os.path.splitext(a_url_list[group])[1]
  88.                         img_url = get_img_url(img_page_url)
  89.                         print(f"第【{i}】页第[{group+1}]组图片下载成功,正在保存该组第 {j} 张图片")
  90.                         save_img(img_url, name)

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

  92.                 print(f"第【{i}】页下载完成" + "`(*>﹏<*)′" + '\n')

  93.             print(f"您的爱豆 {name} 图片 {page_num} 页下载完成,图片保存在当前文件夹下的 {name}_img 文件夹下")
  94.             input("按回车退出程序")
  95.         except:
  96.             print("未知错误,爬取失败。。。")
  97.             exit()


  98. main()
复制代码


之后又用easygui改了个有UI界面的,用pyinstaller打包,并且把源码及打包后的exe可执行文件都放在了(https://wws.lanzous.com/iX7Majmg5wj
),自取
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-23 09:55:38 | 显示全部楼层
本帖最后由 太阳总会升起 于 2020-12-23 10:03 编辑

感谢看到这的各位
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-23 10:06:46 | 显示全部楼层

回帖奖励 +3 鱼币

感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2020-12-28 22:28:59 | 显示全部楼层

回帖奖励 +3 鱼币

提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-29 08:27:46 | 显示全部楼层

回帖奖励 +3 鱼币

学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-29 09:54:43 | 显示全部楼层
感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-29 09:55:51 | 显示全部楼层
单走一个2516 发表于 2020-12-28 22:28
老哥   我也写了个爬虫   在pycharm上写的   pyinstall-F打包后在我的电脑上可以运行,但是发给同学一打开 ...

可能是存储路径的问题,我试了我电脑上也会报错,因为路径错误,你把存取路径改为和py文件统一目录下试试应该就没问题了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-2 01:13:06 | 显示全部楼层

感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-29 14:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表