一、前言

前一段时间,国外媒体 TOP BEAUTY WORLD 评选了全球最帅男性和最美女性Top100,肖战成为了该排行榜历届以来首位登顶的亚洲人。这一消息立刻成为了流量的热点。

想看一下榜单中的最美小姐姐的信息。可是现在还没有最美小姐姐的文字榜单信息。但网站里有上一届的全球最美女性前一百名的榜单数据,包含了姓名、地区和职业等信息。

全球最美 Top100 女神榜单数据,怎能不获取下来好好探究一波?下面我们利用 Python 爬虫将榜单数据获取下来,并进行数据可视化。

二、爬取数据

首先,我们想要获取到的数据,包括小姐姐的姓名、地区、职业等信息。检查发现网页属于静态网页,因此可以直接分析网页源代码,提取出我们想要的数据。

Python代码如下:

# -*- coding: UTF-8 -*-
"""
@File    :spider.py
@Author  :叶庭云
@CSDN    :https://yetingyun.blog.csdn.net/
"""
import requests
from lxml import etree
import logging
from fake_useragent import UserAgent
import openpyxlwb = openpyxl.Workbook()
sheet = wb.active
sheet.append(['ranking', 'name', 'country', 'occupation', 'up_score', 'down_score'])
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
# 随机产生请求头
ua = UserAgent(verify_ssl=False, path='fake_useragent.json')headers = {"accept-encoding": "gzip","upgrade-insecure-requests": "1","user-agent": ua.random,
}url = "https://kingchoice.me/topic-the-100-most-beautiful-women-in-the-world-2020-close-jan-29-2021-1255.html?option=40924"
response = requests.get(url, headers=headers)
# print(response.status_code)
# print(response.text)
html = etree.HTML(response.text)
lis = html.xpath('//div[@class="channel-box3-body box3-body"]/ul/li')
logging.info(len(lis))   # 100条信息for index_, li in enumerate(lis, start=1):src = li.xpath('.//div[@class="avatar"]/img/@src')[0]     # 图片name = li.xpath('.//div[@class="info"]/a/h3/text()')[0]   # 姓名country, occupation = li.xpath('.//div[@class="info"]/span/text()')[0].split(' ', 1)  # 地区 职业up_score = li.xpath('.//div[@class="des"]/div[1]/ul/li[1]/span/text()')[0]    # up分数down_score = li.xpath('.//div[@class="des"]/div[1]/ul/li[2]/span/text()')[0]  # down分数img = requests.get(src, headers=headers).contentwith open(r'.\Top100_beauty_img\{}.jpg'.format(name), 'wb') as f:f.write(img)sheet.append([index_, name, country, occupation, up_score, down_score])logging.info([index_, name, country, occupation, up_score, down_score])logging.info('已保存{}的信息'.format(name))wb.save(filename='datas.xlsx')

结果如下:

三、数据可视化

先来看看全球最美 Top100 女神得分情况

# -*- coding: UTF-8 -*-
"""
@File    :得分.py
@Author  :叶庭云
@CSDN    :https://yetingyun.blog.csdn.net/
"""
import pandas as pd
import pyecharts.options as opts
from pyecharts.charts import Line
from pyecharts.datasets import register_files
from pyecharts.globals import CurrentConfig# 导入自定义的主题 可自己定制  也可以就用pyecharts官方的几种
register_files({"myTheme": ["themes/myTheme", "js"]})
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_excel('datas.xlsx')
up_score = list(df['up_score'])
down_score = list(df['down_score'])
x_data = [i for i in range(1, 101)]c = (Line(init_opts=opts.InitOpts(theme='myTheme')).add_xaxis(xaxis_data=x_data).set_colors(['#7FFF00', 'red'])     # 设置两条折线图的颜色.add_yaxis('up_score', y_axis=up_score,label_opts=opts.LabelOpts(is_show=False)).add_yaxis('down_socre', y_axis=down_score,label_opts=opts.LabelOpts(is_show=False)).set_global_opts(     # 设置x轴 y轴标签xaxis_opts=opts.AxisOpts(name='排名'),yaxis_opts=opts.AxisOpts(name='得分'),title_opts=opts.TitleOpts('得分情况')).render('得分.html')
)

结果如下:排第一、第二的 Lalisa Manoban 和 Taylor Swift 得分远远高于之后的美女。

Top100 美女地区分布

榜单上美女来自全球各地,分析那些地区上榜美女人数最多,取Top10。注意,有些美女是混血,比如上面的 "English-American",我们将其统计两次,即既是英国人也是美国人。

# -*- coding: UTF-8 -*-
"""
@File    :女神地区.py
@Author  :叶庭云
@CSDN    :https://yetingyun.blog.csdn.net/
"""
import pandas as pd
from collections import Counter
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeType, CurrentConfig
import randomCurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_excel('datas.xlsx')
areas = df['country']
area_list = []
for item in areas:if '-' in item:item = item.split('-')for i in item:area_list.append(i)else:area_list.append(item)area_count = Counter(area_list).most_common(10)
print(area_count)
area = [x[0] for x in area_count]
nums = [y[1] for y in area_count]
# 使用风格
bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
colors = ['red', '#0000CD', '#000000', '#008000', '#FF1493', '#FFD700', '#FF4500', '#00FA9A', '#191970', '#9932CC']
random.shuffle(colors)
# 配置y轴数据  Baritem
y = []
for i in range(10):y.append(opts.BarItem(name=area[i],value=nums[i],itemstyle_opts=opts.ItemStyleOpts(color=colors[i])   # 设置每根柱子的颜色))
bar.add_xaxis(xaxis_data=area)
bar.add_yaxis("上榜美女数", y)
bar.set_global_opts(xaxis_opts=opts.AxisOpts(name='国家',axislabel_opts=opts.LabelOpts(rotate=45)),yaxis_opts=opts.AxisOpts(name='上榜美女数', min_=0, max_=55,     # y轴刻度的最小值 最大值),title_opts=opts.TitleOpts(title="各地区上榜美女数",title_textstyle_opts=opts.TextStyleOpts(font_family="KaiTi", font_size=25, color="black")))
# 标记最大值  最小值  平均值   标记平均线
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),opts.MarkPointItem(type_="min", name="最小值"),opts.MarkPointItem(type_="average", name="平均值")]),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="平均值")]))
bar.render("女神地区分布.html")

结果如下:可以看到,英美地区的美女上榜人数最多,占了一半多,其次是韩国、中国的美女。

import pandas as pddf = pd.read_excel('datas.xlsx')
data = df[df['country'].str.contains('Chinese')]
data.to_excel('test.xlsx', index=False)

发现国内上榜的美女,职业均是演员。

import pandas as pddf = pd.read_excel('datas.xlsx')
data = df['occupation'].value_counts()
print(data)

结果如下:

Actress       69
Singer        18
Model         10
Atress         1
model          1
TV Actress     1
Name: occupation, dtype: int64Process finished with exit code 0

最后看看美女们的职业

再检查了网站里数据发现,有个别数据美女职业是模特,其他都是Model,就这一个写为model,还有某一个Actress拼写错误,弄成了Atress。还有一个的职业是 TV Actress,也将她归入演员 Actress 内。数据量少,我们直接在表格中找到,将其更改。

# -*- coding: UTF-8 -*-
"""
@File    :职业分布.py
@Author  :叶庭云
@CSDN    :https://yetingyun.blog.csdn.net/
"""
import pandas as pd
from collections import Counter
from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.globals import ThemeType, CurrentConfig# 引用本地js资源渲染
CurrentConfig.ONLINE_HOST = 'D:/python/pyecharts-assets-master/assets/'df = pd.read_excel('datas.xlsx')
data = list(df['occupation'])
job_count = Counter(data).most_common()pie = Pie(init_opts=opts.InitOpts(theme=ThemeType.MACARONS))
# 富文本效果  环图
pie.add('职业', data_pair=job_count, radius=["40%", "55%"],label_opts=opts.LabelOpts(position="outside",formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",background_color="#eee",border_color="#aaa",border_width=1,border_radius=4,rich={"a": {"color": "#999", "lineHeight": 22, "align": "center"},"abg": {"backgroundColor": "#e3e3e3","width": "100%","align": "right","height": 22,"borderRadius": [4, 4, 0, 0],},"hr": {"borderColor": "#aaa","width": "100%","borderWidth": 0.5,"height": 0,},"b": {"fontSize": 16, "lineHeight": 33},"per": {"color": "#eee","backgroundColor": "#334455","padding": [2, 4],"borderRadius": 2,},},),)
pie.set_global_opts(title_opts=opts.TitleOpts(title='职业占比'))
pie.set_colors(['red', 'orange', 'purple'])   # 设置颜色
pie.render('美女职业分布.html')

榜单中美女们的职业,主要有三种:演员、模特、歌手。这些职业都对各方面都有一定要求,才能发展得好。职业的占比中,可以看到演员的占比是最高的,因为颜值是一个演员重要的名片,特别是如今这样一个看颜值的时代,也是打分成绩中占比最高的一项,因此在榜单中,演员占比最高也就不足为奇了。

作者:叶庭云
CSDN:https://yetingyun.blog.csdn.net/

热爱可抵岁月漫长,发现求知的乐趣,在不断总结和学习中进步,与诸君共勉。

更多阅读

2020 年最佳流行 Python 库 Top 10

2020 Python中文社区热门文章 Top 10

5分钟快速掌握 Python 定时任务框架

特别推荐

点击下方阅读原文加入社区会员

用 Python 分析全球最美Top100女神相关推荐

  1. Python爬取、分析全球最美Top100女神榜单的数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 作者:菜鸟大叔 来源:程序员GitHub Python爬虫.数据分析.网站开发等案例教程视频免费在 ...

  2. 全球最美Top100女神出炉,国内六人上榜,我Python发现了这些秘密...

    最近一段时间,国外媒体TOP BEAUTY WORLD选取了全球最帅男性和最美女性前100名,肖战成为了该排行榜历届以来首位登顶的亚洲人.这一消息立刻成为了流量的热点. 我特地去查了一下,想看一下榜单 ...

  3. 【可视化分析案例】用python分析Top100排行榜数据

    目录 一.数据源 二.数据读取 三.数据概览 四.数据清洗 五.可视化分析 5.1 相关性分析(Correlation) 5.2 饼图(Pie) 5.3 箱形图(Boxplot) 5.4 词云图(wo ...

  4. 【Python爬虫:唯美girl,charles解决反调试】

    Python爬虫:唯美girl,charles解决反调试 Python爬虫:唯美girl,不让F12,我就要! 前言 1.目标简要说明 2.解决无法打开浏览器开发者工具 2.1解决思路 2.2思路具体 ...

  5. Python分析101位《创造营2020》小姐姐,谁才是你心中的颜值担当?

    来源 | CDA 数据分析师 责编 |  Carol Show me data,用数据说话. 今天我们聊一聊<创造营2020>各个小姐姐,点击下方视频,先睹为快: 最近可以追的综艺真是太多 ...

  6. 用Python分析《红楼梦》:见证了贾府的兴衰,你是否还能“笑道”世事无常

    没读过<红楼梦>也能知道前后四十回是不是一个作者写的?很久以前,数据侠黎晨,用机器学习的算法分析了<红楼梦>,认为后四十回和前八十回内容上有明显差距.不过,数据侠楼宇却不这么认 ...

  7. EDG夺冠,我用Python分析一波:粉丝都炸锅了

    EDG夺冠,粉丝炸锅了! 北京时间11月6日,在英雄联盟S11总决赛中,中国LPL赛区战队EDG电子竞技俱乐部以3∶2战胜韩国LCK赛区战队DK,获得2021年英雄联盟全球总决赛冠军. 这个比赛也是备 ...

  8. Python 分析 10 万条弹幕告诉你:《古董局中局2》到底好不好看?

    作者 | 泽龙.Mika 来源 | CDA数据分析师 今天我们聊一聊<古董局中局2> 点击下方视频,先睹为快: 上周日,有一部鉴宝题材的剧静悄悄上线了,那就是夏雨.魏晨等主演的古董局中局系 ...

  9. GDP越高就越幸福吗?用Python分析《世界幸福指数报告》后我们发现…

    公众号后台回复"图书",了解更多号主新书内容 作者:CDA数据分析师 来源:CDA数据分析师  CDA数据分析师 出品   作者:真达.Mika 数据:真达   [导读] 今天教大 ...

最新文章

  1. 如何优雅地根治null值引起的Bug!
  2. 【机器学习】什么是机器学习?(上)
  3. allegro差分信号走线_浅谈硬件设计中的一些思路和方法(5)—信号系统,又学到了...
  4. Qt笔记-添加Win10Pcap库获取网络适配器(MinGW编译器)
  5. 【CCF】201709-2公共钥匙盒
  6. php无限极 left right,php无限极分类实现的两种解决方法
  7. 专家从美国联邦政府机构网络上发现后门
  8. Php调用工行支付接口时的问题解决
  9. ZPCategory
  10. x265的sao优化思考
  11. 永久域名注册流程知识
  12. 前端 css 自动生成,关于前端:利用Zeplin从设计图自动生成CSS提高前端样式开发效率...
  13. 一文看懂新能源汽车国家政策(附政策汇总)
  14. ios获取所有相册的视频并播放
  15. veins车载通信仿真框架(3)--OMNET++基础
  16. 在项目中使用FTPClient上传文件遇到550 Fial to change directoty问题
  17. 面试题:打印螺旋数字
  18. flyway使用--基础
  19. JavaScript 正则表达式 g、i、m分别代表的含义
  20. 公安部消防局全面推进“智慧消防”建设

热门文章

  1. linux系统gettime获取的时间,clock_gettime获取系统时间
  2. 实测大疆智图与ContextCapture Center 集群效率和模型效果对比
  3. LinqC#3.0 Hands on Lab
  4. VS Code ssh远程连接服务器
  5. 一张思维导图读懂Adobe全家桶软件大全及功能应用
  6. php mysql实现下拉列表查询_php+mysql实现二级联动下拉列表
  7. walking机器人入门教程-视觉建图-rtabmap使用视觉建图和导航
  8. JS高级(含ES6)
  9. Matrixtsl有趣的电子积木网络连接板
  10. C++ 打怪游戏 小镇5.3.0--怪物狂欢季