dota玩家与英雄契合度的计算器,python语言scrapy爬虫的使用

时间:2022-07-21 10:13:46

首发:个人博客,更新&纠错&回复

演示地址在这里,代码在这里

一个dota玩家与英雄契合度的计算器(查看效果),包括两部分代码:

1.python的scrapy爬虫,总体思路是page->model->result,从网页中提取数据,组成有意义的数据结构,再拿这数据结构做点什么。

在这个项目中,爬虫的用处是从游久网dota数据库上抓取dota英雄和物品的数据和照片存到本地磁盘,数据存为json格式,方便在网页应用中直接使用。

2.网页应用,使用dota英雄数据、自己编写的小伙伴们的特征数据、自己编写的契合度计算公式,来计算对每个小伙伴来说最契合他的英雄。

算法主要用到的英雄数据是【英雄标签】和【英雄事务评分】,前者说明了该英雄是近战还是远程,主属性是什么,是否能打辅助、Gank、后期等,后者则是对该英雄在Dps、Gank、Support等方面的能力的打分。

这两个数据都来自网络,抓取到本地之后做了一些调整,例如将原来的“眩晕”“控制”两个标签改为了“小控”“小团控”“团控”三个标签,“后期”标签变为“后期”“大后期”两个标签,增加了“不稳定”“多线”“特殊”等特点, 这让计算出的契合度更准确了一点,当然这也远远不是尽善尽美,例如同样是减速,冰女和暗牧的减速当然不同,但还没做更进一步的细分。

另外,对英雄的标签也进行了一些修改和补充,这个工作也还没做完。

我都是边计算契合度,边发现需要改的地方,改的目的就是使计算出的结果与实际情况相符,但又不是硬去凑这个数字。

说说技术吧

只有爬虫值得一说,网页那部分只是做实验和玩儿的,没太多可说,算法自行参考代码就好。

scrapy爬虫,非常强大,基本的需求都覆盖到了,逻辑流程也已经定义好了,只需要程序员在特定的点编写特定角色组件的定义代码。 这种方式很熟悉,每个框架都是这么玩的,控制流是定义好的,而且在它的手里,只有涉及业务的地方需要程序员给出自己的实现。

这个中文文档还是不错的,跟着其中的教程写helloworld,跑通了之后一点点改你的helloworld,遇到困难的地方就查文档,或者百度一下。

关键类:scrapy爬虫类,item模型类,pipeline处理器类。

爬虫组件从指定的url获取html字符串,并解析dom,从中采集信息,构造item对象

框架将构造好的item对象交给处理器组件,处理器组件根据item对象内容,进行处理

在本例中就是:

爬虫从dota网站抓取html字符串,解析dom获得英雄的名称、图片路径、英雄详细页面url,以及物品的名称、图片路径

爬虫又从英雄详细页面抓取html字符串,解析dom获得英雄的标签和各种数据

每个英雄的名称、图片路径、标签、各种数据构成英雄模型对象

每个物品的名称、图片路径构成物品模型对象

保存图片处理器将英雄图片和物品图片存到本地磁盘,并根据英雄名称、物品名称,进行重命名(重命名之前是无意义的名称)

保存英雄数据处理器将英雄数据存到本地磁盘的一个文本文件中,并组成json格式 7 保存物品数据处理器将物品数据存到本地磁盘的一个文本文件中,并组成json格式

显然前2步是抓取和解析,其后两步是做成模型对象,最后三步是处理模型对象。 顺序非常清楚。

由于我python不熟,都是边写代码边查,基本语法,库的使用,可能有的地方写得比较蠢,请不要在意这些细节。

英雄数据的格式

    {      "blue_add": 1.75, //智力成长(蓝色的是智力……)      "gank": 7.2, //gank能力评分      "speed": 315, //初始速度      "id": "132", //英雄id      "blue": 19, //初始智力      "armor": 7.22, //初始护甲      "excute_after": 0.51, //施法后摇      "support": 5.1, //support能力评分      "green_add": 3.2, //敏捷成长      "attack_after": 0.6, //攻击后摇      "ballistic": 0, //弹道速度      "war": 8.1, //团战能力评分      "red": 15, //初始力量(红色)      "tags": "敏捷,近战,后期,减速",//标签们       "hp": 435, //初始生命      "attack_before": 0.3,//攻击前摇       "attack_max": 54, //初始攻击上限      "name": "恐怖利刃", //英雄名称      "dps": 8.9, //dps能力评分      "meat": 6.0, //肉盾能力评分(meat哈哈)      "attack_min": 48, //初始攻击下限      "red_add": 1.9, //力量成长      "excute_before": 0.5, //施法前摇      "range": 128, //攻击距离      "green": 22, //初始敏捷(绿色)      "mp": 247, //初始魔法      "push": 8.5//push能力评分    }

(英语水平见笑啦)

来个图——

dota玩家与英雄契合度的计算器,python语言scrapy爬虫的使用

长期欢迎项目合作机会介绍,项目收入10%用于酬谢介绍人。新浪微博:@冷镜,QQ:908789432

dota玩家与英雄契合度的计算器,python语言scrapy爬虫的使用的更多相关文章

  1. 手把手教大家如何用scrapy爬虫框架爬取王者荣耀官网英雄资料

    之前被两个关系很好的朋友拉入了王者荣耀的大坑,奈何技术太差,就想着做一个英雄的随查手册,这样就可以边打边查了.菜归菜,至少得说明咱打王者的态度是没得说的,对吧?大神不喜勿喷!!!感谢!!废话不多说,开 ...

  2. 皮尔森相似度计算举例(R语言)

    整理了一下最近对协同过滤推荐算法中的皮尔森相似度计算,顺带学习了下R语言的简单使用,也复习了概率统计知识. 一.概率论和统计学概念复习 1)期望值(Expected Value) 因为这里每个数都是等 ...

  3. 余弦相似度及基于python的三种代码实现、与欧氏距离的区别

    1.余弦相似度可用来计算两个向量的相似程度 对于如何计算两个向量的相似程度问题,可以把这它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向.两条线段之间形成一个夹角, ...

  4. 基于python语言使用余弦相似性算法进行文本相似度分析

    编写此脚本的目的: 本人从事软件测试工作,近两年发现项目成员总会提出一些内容相似的问题,导致开发抱怨.一开始想搜索一下是否有此类工具能支持查重的工作,但并没找到,因此写了这个工具.通过从纸上谈兵到着手 ...

  5. ArcGIS 字段计算器 Python 坑

    最近要处理个简单数据,一个字段中为文本类型,包含各种描述.要求是包含平方米的数值提取出来,变成数值,如果包含多个,则把各个值累加起来. 比如 字段值为 “非法占用100平方米” 处理后结果为 100 ...

  6. 快速排序原理、复杂度分析及C语言实现

    本文作者华科小涛:@http://www.cnblogs.com/hust-ghtao/,参考<算法导论>,代码借用<剑指offer> 快速排序是一种最坏情况时间复杂度为的排序 ...

  7. 用python语言写一个简单的计算器

    假如我们有这样一个式子: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2 ...

  8. (二十一)状态模式详解(DOTA版)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本次LZ给各位介绍状态模式, ...

  9. TXT四则运算计算器 后日谈

    经过了软件工程第一个个人项目——<<四则运算器>>的开发后,对软件开发有了新的认识.题目中并没有明确说明对小数和负数是否应该提供支持.在第一个项目结束后,第二个项目则是针对上一 ...

随机推荐

  1. java中类的创建及初始化过程

    java中类的创建及初始化过程无外乎两种情况,其一为单类的创建及初始化,其二具有继承关系的父子类创建及初始化过程.     首先说简单的,单类的创建及初始化过程.在java中我们都知道绝大部分对象的创 ...

  2. c&num; 获取 webbrowser 完整 cookie

    下面的代码实现的功能确实如标题所言,但要求是获取的是当前进程内的webbrowser,跨进程或引用的ShellWindows对象无效, 哎我本来两种情况都要用,只把前者代码先记下: internal ...

  3. 省常中模拟 Test4

    prime 数论 题意:分别求 1*n.2*n.3*n.... n*n 关于模 p 的逆元.p 是质数,n < p. 初步解法:暴力枚举.因为 a 关于模 p 的逆元 b 满足 ab mod p ...

  4. POJ 1837 Balance 01背包

    题目: http://poj.org/problem?id=1837 感觉dp的题目都很难做,这道题如果不看题解不知道憋到毕业能不能做出来,转化成了01背包问题,很神奇.. #include < ...

  5. 5个步骤创建你的第一个RESTFul 服务

    1.啥是RESTFul 服务 在我们创建简单小程序前,先来学习下RESTFul 服务.RESTFul服务就是遵循了 Representational State Transfer(可以参考http:/ ...

  6. Python-3------新年考试周的Python学习

    2016一开始就是考试周,准备专业课的考试复习.每天上午复习,晚上复习到8点半,之后到10点这点时间来看Python.庆幸没有在忙碌的时候荒废 Python的学习. 期待寒假,以前寒假在家总是没事做, ...

  7. 在Mac上使用vs-code快速上手c语言学习&lpar;入门文,老鸟退散&rpar;

    天下事,合久必分.分久必合,你肯定想不到当你逃离到Mac平台这么多年之后,有一天你会再用微软的产品来写代码 :) 其实微软的产品虽然用户体验总是做不到最好,但整体上的确拉低了行业的进入门槛,对于编程也 ...

  8. vue引入css的两种方式

    方案1.在main.js中引入方式    import '@/assets/css/reset.css' 方案2.在.vue文件的<style/>标签里面引入    @import &qu ...

  9. perror strerror使用方法

    1. 简介 很多系统函数在错误返回时将错误原因记录在libc定义的全局变量errno中,每种错误原因对应一个错误码. errno在头文件errno.h中声明,是一个整型变量,所有错误码都是正整数.然后 ...

  10. Linux 增加系统调用 (转)

    Linux 增加系统调用大致步骤: 1.下载好内核文件,在内核源文件中添加好自己的调用函数. 2.编译内核 3.验证. 一.在内核源文件中增加自己的函数 首先将内核文件移至/usr/src/下并解压. ...