[02]栄光の英雄検索可能なデータ構造のプロジェクトの王

 

[02]栄光の英雄検索可能なデータ構造のプロジェクトの王

1つのゴール

1、からhttps://pvp.qq.com/web201605/js/herolist.json GETヒーロープロフィールherolist.json

2、以下を想定している主人公タイプ識別子

hero_type = [ "すべて"、 "戦士"、 "メイジ"、 "タンク"、 "暗殺者"、 "シューター"、 "二次"]

3、からhttps://pvp.qq.com/web201605/herolist.shtml GETページの英雄のリスト、および英雄が提案されている名前と写真のリンク

Webページから4、エキスヒーローアバター名とリンク情報

図5に示すように、結合された情報及び構築物2人のヒーローデータリストの詳細、例えば

[ 'チャンE'、'マスター|ウォリアー|タンク'、'Hanyueプリンセス|花の露反射'、"game.gtimg.cn/images/yxzj/img201606/heroimg/515/515.jpg ']、[' Shangguan Waner ' 'マスター|すべて|アサシン」、'つかの間のペン| Xiuzhu文字'、'game.gtimg.cn/images/yxzj/img201606/heroimg/513/513.jpg']、]

図6は、構造は、データの検索機能とデザインを構築し、検索機能を実装することは容易です

  デフのルックアップ(インデックス、キーワード):
          パス

図2に示すように、コードの実装

輸入JSON 
のBSとしてBS4輸入BeautifulSoupから
のインポート要求

0.1データベース

requests.get = R( 'https://pvp.qq.com/web201605/js/herolist.json') 
は公式サイトから英雄JSONファイルのリストを見つける
hero_list = json.loads(r.textを)

 

hero_list =なし##保存FDとして( "all_hero.json"、 '重量'、コード= "UTF-8")のオープンを持つ:    fd.write(r.text) 恢复オープンと( 'all_hero.json' 、json_dataよう= "UTF-8")をコードする:  hero_list = json.load(json_data)








デフsearch_for_hero_info(名=なし):
  :hero_listの英雄のための
      英雄の「CNAME」の場合:
          ヒーローであれば[「CNAME」] ==名:
              リターン・ヒーロー
  リターンなし
hero_type = [ "すべて"、 "戦士"、 "メイジ"、 "タンク"、 "暗殺者"、 "シューター"、 "二次"]
セレン輸入webdriverをするからブラウザ= webdriver.Chrome( './ chromedriver')browser.get( "https://pvp.qq.com/web201605/herolist.shtml")のhtml = browser.page_source browser.quit()




##保存HTML 
fdなど( "hero_web.html"、 'W'、コード= "UTF-8")のオープンを持つ:
    fd.write(HTML)
##恢复保存的HTML 
hero_html =なし
FDとしてオープン( "hero_web.html"、 'R'、コード= "UTF-8")を持つ:
    hero_html = fd.read()
DEF build_hero_type(主人公):
  combine_type = []    
  であれば主人公の"hero_type":
      combine_type.append(hero_type [主人公[ "hero_type"]])
  であれば主人公の"new_type":
      combine_type.append(hero_type [主人公[ "new_type"] ])
  であれば、主人公の"hero_type2":
      combine_type.append(hero_type [ヒーロー[ "hero_type2"]])
  。リターン(( '|')に参加(combine_type))
#[hero_name、hero_type、hero_skin、hero_url] 
:DEF merge_hero_info(hero_html、hero_json)
  all_heros = []
  :hero_htmlにおける主人公のため
      hero_detail = search_for_hero_info(主人公[0])
      all_heros.append([主人公[0]、build_hero_type(hero_detail) 、hero_detail [ "SKIN_NAME"]ストリップ( "
 '")、ヒーロー[1])    
  戻りall_heros

 

hero_soup = BS(HTML、 'lxmlの')
hero_html_list = hero_soup.find( "UL"、クラス_ = "herolist")
all_hero_list = hero_html_list.find_all( "LI")
gen_heros = [info.text、info.img [ "SRC "] .strip(" / ")] all_hero_listでの情報のために]

 

combined_heros = merge_hero_info(gen_heros、hero_list)
##インデックスを構築
add_to_indexを
`` `
指標である
[ [<キーワード>、[<hero_detail>、...]]、 [< キーワード>、[<hero_detail>、...]] ... ] キーワード文字列AのURL `` ` [ [単位、要因]、[] ] 、[ [キーワード]、[ [ 'バリー・ユン政策'、 'アサシン|すべて'、 '鎌の狂った叫び|ヴェネツィアのカーニバル'、「HTTP ://game.gtimg.cn/images/yxzj/img201606/heroimg/195/195.jpg「]、[」バリー・ユン政策「」アサシン|それがすべて狂った「」叫び鎌|ヴェネツィアのカーニバル『』 http://game.gtimg.cn/images/yxzj/img201606/heroimg/195/195.jpg「]、[」バリー・ユン政策「」アサシン|すべて「」鎌の狂った叫び|ヴェネツィアのカーニバル" 'http://game.gtimg.cn/images/yxzj/img201606/heroimg/195/195.jpg']]、] ストレージのための##の使用リスト





















[「バリー・ユン政策」、「アサシン|すべて」、「鎌の狂った叫び|ヴェネツィアのカーニバル」、「http://game.gtimg.cn/images/yxzj/img201606/heroimg/195/195.jpg」]

インデックスアップ0 2ビルド

add_to_index

インデックスがあります[

[ <キーワード> 、[<hero_detail>、...]]、 [ <キーワード> 、[<hero_detail>、...]] ...

] キーワード文字列のURL

[部、因子]、[]]

[

[キーワード]、[[「バリー・ユン政策」、「アサシン|すべて」、「鎌の狂った叫び|ヴェネツィアのカーニバル」、 ' http://game.gtimg.cn/images/yxzj/img201606/heroimg/195/ 195.jpg 「]、[」バリー・ユン政策「」アサシン|怒っそれがすべて「」叫び鎌|ヴェネツィアのカーニバル「」http://game.gtimg.cn/images/yxzj/img201606/heroimg/195 /195.jpg 「]、[」バリー・ユン政策「」アサシン|怒っそれはすべて「」叫び鎌|ヴェネツィアのカーニバル「」http://game.gtimg.cn/images/yxzj/img201606/heroimg/ 195 / 195.jpg 「]]、

]

ストレージ用3使用リスト

[「バリー・ユン政策」、「アサシン|すべて」、「鎌の狂った叫び|ヴェネツィアのカーニバル」、「http://game.gtimg.cn/images/yxzj/img201606/heroimg/195/195.jpg 」]

:DEF(ヒーロー)get_keywords_array 
  "" "
  根据英雄信息、生成キーワード的列表
  [hero_name、hero_type、hero_skin、hero_url]
  """
  キーワード= []
  の場合、主人公[0]:
      keywords.append(ヒーロー[0])
  であれば英雄を[1]:
      キーワード+ =ヒーロー[1] .split( '|')
  ヒーローであれば[2]:
      キーワード+ =ヒーロー[2] .split( '|')
  リターンキーワード
add_to_indexはDEF(インデックス、キーワード、情報):
  「」「
  検索データのリストにインデックスを追加
  」「」    
  インデックスのエントリのために:
      エントリIF [0] ==キーワード:
          [1]エントリ.append(情報)
          の戻り
  #notの検索
  index.append([キーワード、[情報] ])
デフbuild_up_index(INDEX_ARRAY):
  "" "
  创建搜索数据列表
  """        
  hero_infoためcombined_heros中:
      キーワード= get_keywords_array(hero_info)
      キーワードでのキーの:
          add_to_index(INDEX_ARRAY、キー、hero_info)    
キーワードによって検索情報#
DEF検索(インデックス、キーワード):
  「」「
  リスト内のキーワードに基づいて検索
  」「」        
  インデックスのエントリのために:
      エントリIF [0] ==キーワード:
          リターン・エントリ[1]
  #not検索
  リターンエントリー[0]
search_index = [] 
build_up_index(search_index)

 

 

検索(search_index、 "苏烈")

 

おすすめ

転載: www.cnblogs.com/Lilwhat/p/12431056.html