python实战|1000位小姐姐照制作照片墙,刷新你三观的颜值!

简介: python实战|1000位小姐姐照制作照片墙,刷新你三观的颜值!

今天给大家介绍python如何虎牙小姐姐并制作心形照片墙,

有兴趣的小伙伴们一起来看看吧!

点击进去

卧槽,这颜值.....

i了i了

需求分析

我们的目标有5个,分别是小姐姐的

房间名称、封面照片、昵称、头像、直播间当前人数

网页分析

浏览器快捷键F12打开开发者模式,可以观察到当前页面120个小姐姐信息都在右边列表里面。

但是大家可以看看我标红处,这是一个非标准格式的json数据集,

所以要想获取到小姐姐的信息

先得获取到标准的数据集

发送请求

    url = f'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=2168&tagAll=0&callback=getLiveListJsonpCallback&page={page}'
 
    headers = {
        'cookie': '__yamid_tt1=0.17768755672559844; __yamid_new=C9662ED452B00001997340851CC8140B; game_did=j7Os0i0Txedw1cLUtP0vmKnalM1x65kO3rE; SoundValue=0.50; alphaValue=0.80; guid=0a42cb71a121c360e701bcfbbdfb20c9; udb_guiddata=b45f59af594a4e83cde65858; udb_anouid=1461170529732; isInLiveRoom=true; Hm_lvt_51700b6c722f5cf39906a596ea41f=1623400798,1624888823,1624928362; udb_passdata=3; __yasmid=0.17768755672559844; _yasids=__rootsid%3DC96BDFA246600001458617807F641C12; Hm_lpvt_51700b6c722f5bb4cf39906a596ea41f=1624928418; huya_web_rep_cnt=137',
        'referer': 'https://www.huya.com/g/2168',
        'user-agent': str(UserAgent().random)
        }
    try:
        resp = requests.get(url, headers = headers)
        print(resp.text)

去除非必要信息,构造标准json数据集

    text = resp.text[25:-1]            # 去除text格式前后无效字符
    json_text = json.loads(text)       # 转为标准json格式数据集
    print(json_text)

接下来我们就可以获取小姐姐信息啦

      room_name = item['roomName']        # 房间名称
      cover_link = item['screenshot']     # 封面照片
      nick = item['nick']                 # 昵称
      prof_phot = item['avatar180']       # 头像
      view_num = item['totalCount']       # 直播间当前人数
      
      print(room_name, cover_link, nick, prof_phot, view_num)

多页数据获取

小姐姐们直播大多集中在晚上,所以晚上爬取的数据有成千个,白天也就几百个,

不管你想获取多少,一个for循环就搞定啦

   # 获取10页虎牙小姐姐
   for page in range(1, 10+1)
   url = f'https://www.huya.com/cache.php?m=LiveList&do=getLiveListByPage&gameId=2168&tagAll=0&callback=getLiveListJsonpCallback&page={page}'

存入Excel

这里我们使用的是openpyxl来存储在Excel中

  # 创建
  ws = op.Workbook()
  wb = ws.create_sheet(index=0)
 
  wb.cell(row=1, column=1, value='房间名称')
  wb.cell(row=1, column=2, value='封面照片')
  wb.cell(row=1, column=3, value='昵称')
  wb.cell(row=1, column=4, value='头像')
  wb.cell(row=1, column=5, value='直播间当前人数')
  
  # ----------------------------------------
  
  # 存储
  wb.cell(row=count, column=1, value=room_name)
  wb.cell(row=count, column=2, value=cover_link)
  wb.cell(row=count, column=3, value=nick)
  wb.cell(row=count, column=4, value=prof_phot)
  wb.cell(row=count, column=5, value=view_num)
 
  ws.save('虎牙小姐姐.xlsx')

下载图片

重点来了,我要下载小姐姐美照了

    for num, (pic_img, pic_name) in enumerate(save_pic):
      r = requests.get(pic_img)
      pic = r.content
      try:
          with open('./pictures/{}.jpg'.format(pic_name), 'wb') as fin:
              print(f'正在爬取第{count}张图片')
              fin.write(pic)
              print('{}.jpg----下载成功'.format(pic_name))
      except:
          print('下载失败!')

然后就是这样

图片可视化

这么多好看的小姐姐我要给他们将摆它们成一个心形,这样才能表达我满满的爱意

# 设置心性图片矩阵
    HEART = [[0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0],
             [0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0],
             [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
             [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
             [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
             [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
             [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
             [0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0],
             [0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0],
             [0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0]]
 
    # 定义相关参数
    SIZE = 100  # 每张图片的尺寸,越大越清晰
    N = 1  # 每个点位上放置1*1张图片
 
    # 计算相关参数
    width = np.shape(HEART)[1] * N * SIZE  # 照片墙宽度
    height = np.shape(HEART)[0] * N * SIZE  # 照片墙高度
    n_img = np.sum(HEART) * (N ** 2)  # 照片墙需要的照片数
    filenames = random.sample(os.listdir(save_path), n_img)  # 随机选取n_img张照片
    filenames = [save_path + f for f in filenames]
 
    print('宝宝开始集合!')
    # 绘制爱心墙
    img_bg = Image.new('RGB', (width, height))  # 设置照片墙背景
    i = 0
    for y in range(np.shape(HEART)[0]):
        for x in range(np.shape(HEART)[1]):
            if HEART[y][x] == 1:  # 如果需要填充
                pos_x = x * N * SIZE  # 填充起始X坐标位置
                pos_y = y * N * SIZE  # 填充起始Y坐标位置
                for yy in range(N):
                    for xx in range(N):
                        img = Image.open(filenames[i])
                        img = img.resize((SIZE, SIZE), Image.ANTIALIAS)
                        img_bg.paste(img, (pos_x + xx * SIZE, pos_y + yy * SIZE))
                        i += 1
    # 保存图片
    img_bg.save('love.jpg')
    print('宝宝集合完毕!')


相关文章
|
7天前
|
机器学习/深度学习 数据挖掘 Serverless
手把手教你全面评估机器学习模型性能:从选择正确评价指标到使用Python与Scikit-learn进行实战演练的详细指南
【10月更文挑战第10天】评估机器学习模型性能是开发流程的关键,涉及准确性、可解释性、运行速度等多方面考量。不同任务(如分类、回归)采用不同评价指标,如准确率、F1分数、MSE等。示例代码展示了使用Scikit-learn库评估逻辑回归模型的过程,包括数据准备、模型训练、性能评估及交叉验证。
19 1
|
8天前
|
调度 开发者 Python
探索Python中的异步编程:从基础到实战
【10月更文挑战第9天】在Python的世界中,异步编程是一个让开发者既能提升应用性能又能保持代码可读性的强大工具。本文将带你一探究竟,从理解异步编程的基本概念开始,到深入剖析其背后的原理,再到通过实际代码示例掌握其应用技巧。无论你是异步编程的新手还是希望深化理解的老手,这篇文章都将为你打开一扇新的大门,让你的项目因使用异步而更加高效和强大。
|
13天前
|
存储 人工智能 Java
Python编程入门:从基础到实战
【10月更文挑战第4天】本文旨在为初学者提供一个全面而深入的Python编程学习路径。我们将从Python的基本语法和概念开始,然后逐步深入到更复杂的主题,如数据结构、面向对象编程和异常处理等。最后,我们将通过一些实际的项目案例,帮助读者将理论知识应用到实践中去。无论你是编程新手,还是有一定经验的开发者,都可以在这篇文章中找到适合自己的学习内容。让我们一起开启Python编程的学习之旅吧!
|
13天前
|
数据挖掘 程序员 调度
探索Python的并发编程:线程与进程的实战应用
【10月更文挑战第4天】 本文深入探讨了Python中实现并发编程的两种主要方式——线程和进程,通过对比分析它们的特点、适用场景以及在实际编程中的应用,为读者提供清晰的指导。同时,文章还介绍了一些高级并发模型如协程,并给出了性能优化的建议。
21 3
|
12天前
|
数据采集 程序员 开发者
Python编程入门:从基础到实战
【10月更文挑战第5天】本文旨在为初学者提供一条清晰的Python学习路径,涵盖基础知识、关键概念、实战项目以及常见问题解答。我们将通过简单易懂的语言和实际代码示例,帮助读者快速掌握Python编程技能。无论你是零基础的新手还是有一定经验的开发者,都能在这篇文章中找到有价值的信息。让我们一起开启Python编程之旅吧!
|
14天前
|
前端开发 JavaScript API
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(二)
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(二)
16 2
|
14天前
|
前端开发 JavaScript API
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(一)
JavaScript逆向爬取实战——使用Python实现列表页内容爬取(一)
15 1
|
14天前
|
存储 开发者 Python
Python 编程入门:从基础到实战
【10月更文挑战第3天】本文将引导你进入 Python 编程的奇妙世界,从零基础开始,逐步深入到编程实践。我们将一起探索 Python 的基本语法、数据结构、函数和模块的使用,以及面向对象编程的概念。通过实际案例,你将学会如何应用这些知识解决实际问题,并最终能够独立编写简单的 Python 程序。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将为你提供一个坚实的起点。
11 1
|
10天前
|
开发者 Python
Python中的元类深度剖析与实战应用
Python中的元类深度剖析与实战应用
14 0
|
14天前
|
数据采集 数据可视化 数据挖掘
Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
【10月更文挑战第3天】Python 数据分析实战:使用 Pandas 进行数据清洗与可视化
53 0