[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、 "苏烈")