太阳总会升起 发表于 2020-12-23 09:53:38

爱豆图片下载(含源码及打包exe可执行文件)

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


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

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

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"]/text()')

    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')

    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)
                  print(f"第【{i}】页第[{group+1}]组图片爬取中……" + '\n')

                  # 遍历每个组对应图片的url
                  for j in range(1, img_count+1):
                        img_page_url = os.path.splitext(a_url_list) + f'_{j}' + os.path.splitext(a_url_list)
                        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}】页下载完成" + "`(*>﹏<*)′" + '\n')

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


main()

之后又用easygui改了个有UI界面的,用pyinstaller打包,并且把源码及打包后的exe可执行文件都放在了(https://wws.lanzous.com/iX7Majmg5wj
),自取

太阳总会升起 发表于 2020-12-23 09:55:38

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

感谢看到这的各位{:5_91:}

bhcqzf 发表于 2020-12-23 10:06:46

感谢分享

单走一个2516 发表于 2020-12-28 22:28:59

守望星星 发表于 2020-12-29 08:27:46

学习

南栀千惠 发表于 2020-12-29 09:54:43

感谢分享

太阳总会升起 发表于 2020-12-29 09:55:51

单走一个2516 发表于 2020-12-28 22:28
老哥   我也写了个爬虫   在pycharm上写的   pyinstall-F打包后在我的电脑上可以运行,但是发给同学一打开 ...

可能是存储路径的问题,我试了我电脑上也会报错,因为路径错误,你把存取路径改为和py文件统一目录下试试应该就没问题了

tryhi 发表于 2021-1-2 01:13:06


感谢分享
页: [1]
查看完整版本: 爱豆图片下载(含源码及打包exe可执行文件)