摘要:Python 数据采集、分析实战。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/96713d3a0d91b194ebac7d67b24dc374.jpeg)
昨天借最近持续火爆的的《复联4》说了说漫威电影宇宙票房话题,今天票房就上升到了全球第二,超越保持 20 多年记录的《泰坦尼克号》,有生之年能见到也是难得了。
另外,文末卖了个关子:那么多英雄到底谁最强?今天就来用 Python 对比分析一下各位英雄的综合实力,结果绝对超出你预料。
先说说下漫威电影和漫威漫画的关系。我们看的电影叫「漫改电影」,意思就是从漫画中改编过来搬上荧幕的。这些电影出现不过十年,而漫画五十年前就出现了,大多数数角色由斯坦·李创造,所以你可以看到每部漫威电影他都有客串。
电影中为了呈现更好的视觉效果以刺激观众感官,会刻意加强或者弱化某些英雄的能力,尤其是精彩的打斗场景,让我们以为这就是他们的真实实力。
比如:
美队跟谁都能五五分
最强之人是灭霸
正面对决猩红女巫能手撕灭霸
惊奇队长貌似是唯一一个能单挑不怵灭霸的
而在漫画中的实际情况并不完全是这样。漫画里对每个角色都设定了能力值,能力值包括六个方面,分别是:
Intelligence / 智力
Power / 能量
Strength / 力量
Speed / 速度
Durability / 耐力
Combat / 格斗技
比如钢铁侠的能力值是这样的:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/0cc83915e7d72daa32b2452229794173.jpeg)
可以看到他的智力和能量值是满分,很贴合电影中 Tony Stark 演的钢铁侠形象。而速度和格斗技巧不过刚及格,可电影中给我们看到的钢铁侠上天入地速度杠杠的,打斗也很强。唯一的解释就是,电影作了美化。
在权威漫画人物网站:superherodb上,给每位角色都标出了能力值。孰强孰弱一对比就一目了然。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/a47e49ae8fe267b8bcf84d690cf1ecf6.jpeg)
不只是上面这些热门角色,该网站拥有包括漫威 、DC 在内的上百家漫画公司的数千位漫画角色详细信息,可以说是非常强大。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/eafb697c9f461127870d8c829e353b0f.jpeg)
当然,一个个去对比很麻烦而且很难发现深层次关系,这时候就需要 Python 出场了。
首先需要获取这些数据,怎么获取呢?当然是爬虫。鉴于以前爬过类似的网站,这里就不爬了感兴趣可以自行尝试。
还有一种更为取巧的方法就是找现成的 API 接口然后调用即可。网上找了一圈,最终找到了 superheroapi 这个网站。
该网站上提供了 700 多位角色的详细信息,数量虽不多但也够用。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/48e049bcdc5c9ffe8bc2b00318895676.jpeg)
API 返回结果是 JSON 格式,包括能力值、身高体重等信息,例如:钢铁侠的信息如下:
1{
2 "response": "success",
3 "results-for": "Iron Man",
4 "results": [
5 {
6 "id": "346",
7 "name": "Iron Man",
8 "powerstats": { # 能力值
9 "intelligence": "100",
10 "strength": "85",
11 "speed": "58",
12 "durability": "85",
13 "power": "100",
14 "combat": "64"
15 },
16...
17}
数据采集
下面我们用 Python 先获取网站全部 700 多位角色信息然后保存到本地数据库。
代码见文末,几分钟就可以下载好结果如下:
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/b83e4ad1b0e0d4ebb4a7b39b2c60e05f.jpeg)
简单的清洗处理后就可以着手分析。
先看漫威复联系列。说起复联最重要的人物自然是六位初代英雄。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/17a09ff325cbeed3e13adea685b74593.jpeg)
初代六人组实力对比
凭电影中的印象对这六人的实力排序的话,你会怎么排?
按图上从左到右的顺序来看看六人的实际实力。
雷神
通过雷达图可以看到雷神很全面,多项数据都是满分,几乎没有弱点,然而智力这块儿只有中等水平。如果你看过雷神系列就会知道他的智商的确很捉急。
![mark 640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/29b8c6d125984e6ae524c8f5f2360c61.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/af9cabe2fcf179a4114ce792a8befd0d.jpeg)
寡姐身为六人组里唯一的女性,不会飞也没有什么道具,最拿手的就是肉搏,《钢铁侠2》首次出场表现就奠定了她的风格。
![mark 640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/03c6626577e3b1b6706403bcc261372c.jpeg)
鹰眼
箭筒里永远射不完箭的鹰眼在《雷神1》中首次亮相,实力差不多是最弱的,感觉《复联1》中演反派更厉害。
![mark 640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/42a104cf2e01125e45bf37a9c918dc07.jpeg)
绿巨人
终于出现个和雷神实力匹配的对手,三项能力满分,格斗技和速度中等,浩克的确格斗能力没那么强,在《复联3》开头分分钟被灭霸给收拾了。智商比雷神高,毕竟是拥有 7 个博士头衔的人。
![mark 640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/f8cbd34f00496be2082d97423fdf56f4.jpeg)
美国队长
整个系列一共说了三次「I can do this all day.」 的美队给人最大的错觉就是:和谁都能五五开,然而毕竟肉身,实际没有那么强。
![mark 640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/6bd6ffd2e1c54ddb1209a8344752d839.jpeg)
钢铁侠
最后是最帅气最聪明的托尼了,感觉没有电影中想的那么强大,主要他演得好印象分高。
![mark 640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/e6eb598d66e47a3e82c8e587c478f4b8.jpeg)
来个汇总看得更清楚,初代六人组孰强孰弱这下有答案了吧?
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/90fad91e3ba394cf5b571b1321cb8922.jpeg)
十位重要英雄实力
除了六位初代英雄,陆陆续续还出现了很多其他英雄,挑选十位露脸最多的来看看。
洛基
有「锤」必有「基」,虽然电影中洛基饰演的是反派,但其实不坏,跟雷神相爱相杀带来不少笑料,所以重要人物中必须「Loki」的名字。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/70b75dd7de28c6ed8a2d371f9a58c7a9.jpeg)
惊奇队长
很多人都说惊奇队长应该是《复联》中最牛逼的人,在《复联4》打了个酱油。战斗力的确很惊人,但 DC 中还有一个比她还厉害的男性「惊奇队长」,一会儿说。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/c524da3800caf626025c4fad15430ed6.jpeg)
绯红女巫
不得不说绯红女巫是又美又能打,差点把灭霸撕了。我不会告诉你他们俩早在另外一部电影《老男孩》里也上演了一出别样「大战」。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/333bc31d0b4f85533f6285dcb5988e1a.jpeg)
幻视
《复联2》中诞生就拥有心灵宝石的幻视着实牛逼,把奥创打得满地找牙,但到了后面怎么就沦落到被保护的境地了。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/fbc52f157a3fefe61362fff5102e5982.jpeg)
奇异博士
卷福饰演的奇异博士还是很牛逼,有时间宝石、有斗篷还有酷炫的阿戈摩托之眼。《复联4》最后对着托尼竖起了一根手指,大概是说:「福尔摩斯,只能有一个。」
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/dd22e7a898c53e9d7abcd579ae27c388.jpeg)
蚁人 & 蜘蛛侠
蚁人和蜘蛛侠差不多,飞来飞去。蚁人是复联少数几个绝顶聪明的人,可以说《复联4》能够逆转,蚁人功劳很大。蜘蛛侠实力均衡,早在《钢铁侠》系列中就出场了,虽然身为托尼的小跟班,但漫画中蜘蛛侠是漫威最大的 IP。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/9f0f3def7b58b75df0df2568a4b3b3c7.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/4893430a1c20f3276d0e868ca753b417.jpeg)
黑豹 & 冬兵
要问谁比钢铁侠还有钱,那必然是「振金王国」瓦坎达的国王黑豹了。在去年的独立电影中大放异彩,复联中到没有太多施展拳脚的机会。
要论复联有哪几对相爱相杀组合,除了雷神和洛基,就是美队和冬兵了,《美队1》中还是挺感人的。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/c2facda41fe0ee9d7a17a7b334969d20.jpeg)
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/ff70f841b8d94187b2471f8d4b931af6.jpeg)
星爵
最后隆重出场的是星爵,也是我本人最喜欢的复联英雄。《银河护卫队1》打养父,《银河护卫队2》打生父,《复联34》打岳父,他才是最牛逼的「灭爸」。现实中的岳父是位了不得的人物:施瓦辛格。
虽然综合实力不怎么样但银河系尬舞天团的能力不是吹的。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/fedd12bb20cd5217f76889d3c5288462.jpeg)
来听听这首星爵伴随 Walkman 尬舞的歌。
以上就介绍了十六位漫威英雄。
去掉四位稍弱人物,来对比下六人组综合实力。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/61caefadc565b052290a1f6118ca93ae.jpeg)
惊队除了智商稍微弱点,其他基本无敌,这点和雷神很像,二者综合实力也差不多,可以说是新老成员中最厉害的了。
灭霸
正派说完轮到大 BOSS 灭霸出场了。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/4461cb316f5f3b8033a1b2304f7a7baf.jpeg)
看到灭霸就会想起电影中被他那宝石手套支配的恐惧,五一终于理解灭霸的初心了。而灭霸真实的实力如何呢,来看看他和雷神、惊奇队长三人对比。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/3a5c5c9889805481d807a41d63b6bbae.jpeg)
可以看到灭霸的优缺点非常明显,优点是和托尼一样绝顶聪明,缺点就是速度慢,难怪电影中要靠宝石跑到地球来。综合来看,三者单挑的话基本五五开,灭霸戴上手套的话就另算了。
漫威和 DC 英雄比
作为两大漫画巨头,漫威和 DC 一直在明争暗斗,早些年 DC 要比漫威混得好,漫威这十几年才起来。两大公司手上都握有大量漫画角色,对比一下这两家当家英雄应该会很有意思。
DC 比较熟知的就是超人了,这里来拿雷神和超人对比下看看。可以看到超人近乎完美,比雷神聪明速度也更快,除了格斗稍弱雷神,总体来说是碾压雷神的。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/c1506d5c88ec9d3dbb551edbee8c6152.jpeg)
DC 其他英雄又如何呢,把 700 多位英雄六项能力值汇总得到综合实力,然后取前十名来看看。
标红色的是 DC 家的
浅灰色是其他公司的
深黑色的是漫威家的
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/b1f4092117f198fc24c6172b8f252996.jpeg)
完全没有想到,综合实力最强的 10 位竟然有 8 位都来自 DC,漫威完全被碾压,唯一登榜的是超越者(Beyonder),雷神都上不了榜。
然而问题来了,拥有如此众多实力超强的英雄,DC 近些年为什么风头全被漫威压住了?
榜单上排名第一得到了 600 满分无敌了,来揭晓下 TA 是谁。
就是这位 Man of Miracles,别名 Mother of Existence 宇宙的创造者,上帝是他儿子。
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/731db31cb82eac0d8217abdf1bf52a8f.jpeg)
其他有意思的
最高的人
很多漫威英雄五大三粗,就来扒一扒哪些角色最高。排第一的是 「Ymir」超过 300 米,他是冰霜巨人的祖先,即洛基的祖先。范迪塞尔配音的 Groot 在银护中非常高,也仅能排第 10。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/6c96757bd6bfbcb33bd5c65865b23329.png)
最壮的人
复联中浩克、灭霸都很壮,可在诸多大神面前就是小巫见大巫了。排第一的就是熟悉的哥斯拉,重达九万吨,不得不说日本人脑洞真大。第二的金刚也有九千吨。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/fe8a404f9a75f40abb25763a63e072bd.png)
以上就是对宇宙英雄的一些简单分析,感兴趣的话可以自己试试。数据采集部分的代码如下:
1# -*- coding: utf-8 -*-
2"""
3Created on Mon May 5 12:57:10 2019
4@author: 高级农民工
5"""
6import requests
7import pandas as pd
8import re
9from requests.exceptions import RequestException
10import time
11from multiprocessing import Process, Pool
12import pymongo
13import os
14
15# https://superheroapi.com/,facebook 登陆即可自动获取token
16token = '输入你的token' # 如果获取不到,可以微信找我提供给你
17
18def getapi(i):
19 url = 'https://superheroapi.com/api/%s/%s' % (token, i)
20 data = requests.get(url).json()
21 return data
22
23def parseapi(item):
24 lst = {
25 'id': item['id'],
26 'name': item['name'],
27 # 提取人物战斗力值
28 'intelligence': item['powerstats']['intelligence'],
29 'strength': item['powerstats']['strength'],
30 'speed': item['powerstats']['speed'],
31 'durability': item['powerstats']['durability'],
32 'power': item['powerstats']['power'],
33 'combat': item['powerstats']['combat'],
34 # 提取人物特征
35 'gender': item['appearance']['gender'],
36 'race': item['appearance']['race'],
37 'height': item['appearance']['height'][1], # 取cm
38 'weight': item['appearance']['weight'][1], # 取kg
39 # 提取人物头像url
40 'image': item['image']['url'],
41 'publisher': item['biography']['publisher'], # 出版方 Marvel/DC
42 'alignment': item['biography']['alignment'] # 正派/反派
43 }
44
45 # 写入csv
46 write_csv(lst)
47
48 # 或者写入MongoDB
49 # write_mongodb(lst)
50
51 # # 下载图片拼图片墙
52 image = item['image']['url']
53 save(image)
54
55def write_mongodb(lst):
56 client = pymongo.MongoClient('localhost', 27017)
57 db = client.marvel
58 mongo_collection = db.marvel_stats
59
60 if mongo_collection.update_one(lst, {'$set': lst}, upsert=True):
61 pass
62 else:
63 print('存储失败')
64 print('id:%s 存储完成' % lst['id'])
65
66def write_csv(lst):
67 content = pd.DataFrame([lst])
68 content.to_csv('./marvel.csv', mode='a', encoding='utf_8_sig',
69 index=False, header=None)
70
71def save(image):
72 # 获取头像编号
73 num = re.search('https:.*\/(.*?).jpg', image).group(1)
74 dir = os.getcwd() + '\\marvel\\'
75 if not os.path.exists(dir):
76 os.mkdir(dir)
77 file_path = '{0}\\{1}.{2}'.format(dir, num, 'jpg')
78 try:
79 response = requests.get(image)
80 if response.status_code == 200:
81 with open(file_path, 'wb') as f:
82 f.write(response.content)
83 print('编号:%s下载完成' % num)
84 except exceptions:
85 pass
86
87def main(i):
88 data = getapi(i)
89 parseapi(data)
90
91if __name__ == '__main__':
92 start = time.time()
93 pool = Pool()
94 for i in range(1, 732):
95 # 多进程
96 pool.apply_async(main, args=[i, ])
97 pool.close()
98 pool.join()
99 end = time.time()
100 print('总共用时{}s'.format((end - start)))
/今日留言主题/
你喜欢漫威中的谁?
(留言格式:Dayxx:blahblah)