调用 marvel API 获取 marvel 英雄 id,及与英雄相关的故事数,并储存在 mongodb 数据库中;生成 gephi 所需文件(这里以 csv 文件为例);使用 gephi 生成英雄关系图谱。
参考文章:谁才是漫威的绝对C位
更多实用有趣的例程,欢迎关注“Crossin的编程教室”及同名 知乎专栏
使用第三方库 marvel,获取 marvel 所有英雄,并根据与英雄相关故事数排序。
1.1 marvel 库https://pypi.org/project/marvel/ 将官方 API https://developer.marvel.com/docs进行了封装,更方便使用,当然密钥还是要自己去官网申请的;
1.2 选择一定数量的相关故事数多的 marvel 英雄(一共1491位英雄)进行分析。
熟悉 gephi 的常用操作,如基本界面、布局及统计的使用。
2.1 查看官方新手文档https://gephi.org/users/quick-start/,了解基本操作,及相应设置。
本次分析主要在于查找 marvel 英雄故事数最多的前n位英雄的人物关系,所以数据抓取时,要根据自己的目的进行抓取,这是最重要的。
3.1 再次强调先思考自己需要的数据,当然只是想尝试一下,探索未知的秘密也是极棒的。
获取 marvel 英雄所有角色(共1491个):store.charac(); 生成节点文件:node()
1.1 官网(https://developer.marvel.com/)注册后,获取 PUBLIC_KEY 和 PRIVATE_KEY ,同时告知限制抓取速率3000/day;抓取前可在官网测试 API 接口(https://developer.marvel.com/docs)测试,了解请求参数,及返回数据的内容。
1.2 store.charac() 由我这边抓取实际情况,每次最多请求100个角色信息,则15次就可抓取完成,抓取异常出现情况较少,所以出现问题就对错误处,重新抓取,直到成功。抓取成功后直接存入 mongodb 中,由于该文档抓取数据量很大,除所需的故事相关的数据外,还包括漫画,系列的相关信息(同时也可以绘制英雄角色与其他参数的相关性图)。便不展示mongodb 中的全部数据,具体返回内容可在官网测试 API 接口(https://developer.marvel.com/docs)查看。
1.3 node() 从数据库中取出英雄及对应的故事数后,由故事数最多的前99名英雄的 id,name,相关联故事数;组成初步的节点文件。
抓取与英雄相关的所有故事:store_stories(); 更新节点文件:update_character();生成边文件:edge()
2.1 由节点文件(见 inode.csv)可知,将99名角色相关的故事数总共有约70000多条,每次可抓100条,大概抓取700多次。此时抓取时要注意:
a store_stories() 可能因为网络等问题不能一次抓取成功,这时就需要输出错误信息;首先将每一位角色信息争取抓完,抓取不完就将 角色 id 与当前抓取次数 保存在本地文件中,然后再根据 log 文件手动抓取,存入数据库。
b update_character() 由store_stories()抓取的故事文件可发现实际抓取故事数与前文store_charac()抓取数目不一样,以实际抓取为准,更新节点文件相关的故事数。
c edge() 最后就是边文件的获得,内容是两两角色 id 及相关联的故事数。
查看官方新手文档(https://gephi.org/users/quick-start/)。
本次使用输入 gephi 文档:inode.csv, iedge.csv;
步骤:
图片参考及部分 gephi 设置。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。