dota玩家與英雄契合度的計算器,python語言scrapy爬蟲的使用

首發:我的博客,更新&糾錯&回覆html

演示地址在這裏,代碼在這裏python

一個dota玩家與英雄契合度的計算器(查看效果),包括兩部分代碼:git

1.python的scrapy爬蟲,整體思路是page->model->result,從網頁中提取數據,組成有意義的數據結構,再拿這數據結構作點什麼。程序員

在這個項目中,爬蟲的用處是從遊久網dota數據庫上抓取dota英雄和物品的數據和照片存到本地磁盤,數據存爲json格式,方便在網頁應用中直接使用。github

2.網頁應用,使用dota英雄數據、本身編寫的小夥伴們的特徵數據、本身編寫的契合度計算公式,來計算對每一個小夥伴來講最契合他的英雄。算法

算法主要用到的英雄數據是【英雄標籤】和【英雄事務評分】,前者說明了該英雄是近戰仍是遠程,主屬性是什麼,是否能打輔助、Gank、後期等,後者則是對該英雄在Dps、Gank、Support等方面的能力的打分。數據庫

這兩個數據都來自網絡,抓取到本地以後作了一些調整,例如將原來的「眩暈」「控制」兩個標籤改成了「小控」「小團控」「團控」三個標籤,「後期」標籤變爲「後期」「大後期」兩個標籤,增長了「不穩定」「多線」「特殊」等特色, 這讓計算出的契合度更準確了一點,固然這也遠遠不是盡善盡美,例如一樣是減速,冰女和暗牧的減速固然不一樣,但還沒作更進一步的細分。json

另外,對英雄的標籤也進行了一些修改和補充,這個工做也還沒作完。網絡

我都是邊計算契合度,邊發現須要改的地方,改的目的就是使計算出的結果與實際狀況相符,但又不是硬去湊這個數字。數據結構

 

說說技術吧

只有爬蟲值得一說,網頁那部分只是作實驗和玩兒的,沒太多可說,算法自行參考代碼就好。

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能力評分    }

(英語水平見笑啦)

來個圖——

長期歡迎項目合做機會介紹,項目收入10%用於酬謝介紹人。新浪微博:@冷鏡,QQ:908789432

相關文章
相關標籤/搜索