前提・実現したいこと
以下のプログラムによって抽出したデータをまとめたリストである
his_list
tit_list
hap_list
をhis_listを基準にした年表形式にまとめたいのですが、どのようなプログラムにすればよいのかわかりません。
想定しているレイアウトは以下のようなものです。
I 年代 I 出来事 I 作品名
+-----------+--------------+-------------
I his_list[0] I tit_list[0] I hap_list[0]
I his_list[1] I tit_list[1] I hap_list[1]
(以下、リストの終わりまで続く、最も長いリストに年表の長さに合わせる)
どのようにすればよろしいでしょうか?
該当のソースコード
#coding:utf-8 import re from bs4 import BeautifulSoup import pandas as pd results_hi = []#年号を格納しておく関数 results_t = []#作品タイトルを格納しておく関数パターン1 results_ha = []#出来事を格納しておく関数パターン1 absobe_pattern_history = '^U.C.[0-9]{4}'#宇宙世紀の年号 absobe_pattern_title = '^機動戦士ガンダム'#作品タイトル抽出パターン1 absobe_pattern_title2 = '^機動戦士[\t\n\r\f\v一-龥ぁ-んァ-ンa-xA-ZΖ0-9_ー・]{1,}ガンダム'#作品タイトル抽出パターン2 absobe_pattern_title3 = '^機動戦士ガンダム[ \t\n\r\f\v一-龥ぁ-んァ-ンa-xA-ZΖ0-9_ー・]{1,}'#作品タイトル抽出パターン3 absobe_pattern_title4 = '^機動戦士[\t\n\r\f\v一-龥ぁ-んァ-ンa-xA-ZΖ0-9_ー・]{1,}ガンダム[ \t\n\r\f\v一-龥ァ-ンa-xA-ZΖ0-9_ー・]{1,}'#作品タイトル抽出パターン4 absobe_pattern_happen = '[\t\n\r\f\v一-龥ァ-ンa-xA-Z0-9_ー・]{1,}戦争'#出来事抽出パターン1 absobe_pattern_happen2 = '[\t\n\r\f\v一-龥ァ-ンa-xA-Z0-9_ー・]{1,}戦役'#出来事抽出パターン2 absobe_pattern_happen3 = '[\t\n\r\f\v一-龥ァ-ンa-xA-Z0-9_ー・]{1,}紛争'#出来事抽出パターン3 absobe_pattern_happen4 = '[\t\n\r\f\v一-龥ァ-ンa-xA-Z0-9_ー・]{1,}抗争'#出来事抽出パターン4 # encoding は取得したページの文字コードを選択 filepath = '/home/urai/crawling/gandamu/gandamu uchuuseiki/1.html' with open(filepath , encoding='utf-8') as f: html = f.readlines() for i in html: soup = BeautifulSoup(i, 'html.parser')#SoupでHTMLからデータを取る for text in soup.find_all(text=True):#Tabを取り除く if text.strip():#テキストであるか判定 results_hi.append(re.findall(absobe_pattern_history, text))#条件に適合した文を抽出、results_hiに格納 results_t.append(re.findall(absobe_pattern_title, text))#results_tに格納 results_t.append(re.findall(absobe_pattern_title2, text)) results_t.append(re.findall(absobe_pattern_title3, text)) results_t.append(re.findall(absobe_pattern_title4, text)) results_ha.append(re.findall(absobe_pattern_happen, text)) results_ha.append(re.findall(absobe_pattern_happen2, text)) results_ha.append(re.findall(absobe_pattern_happen3, text)) results_ha.append(re.findall(absobe_pattern_happen4, text)) f.close() UC_history = [hi[0] for hi in results_hi if hi != []]#抽出データから空っぽのデータを取り除いた上で、入れ子構造を解消 UC_title = [t[0] for t in results_t if t != []]#抽出データから空っぽのデータを取り除いた上で、入れ子構造を解消 UC_happen = [ha[0] for ha in results_ha if ha != []]#抽出データから空っぽのデータを取り除いた上で、入れ子構造を解消 his_list = sorted(set(UC_history), key=UC_history.index)#重複を排除 tit_list = sorted(set(UC_title), key=UC_title.index)#上に同じ hap_list = sorted(set(UC_happen), key=UC_happen.index)#上に同じ his_list.sort()#年代順に並び替える print(his_list) print(tit_list) print(hap_list) # 最長のリストにあわせNone要素を詰め込む his_l,tit_l,hap_l = [],[],[] from itertools import zip_longest for his,tit,hap in zip_longest(his_list,tit_list,hap_list): his_l.append(his) tit_l.append(tit) hap_l.append(hap) df = pd.DataFrame({'年代':his_l,'出来事':hap_l,'作品名':tit_l},columns=['年代','出来事','作品名']) df.to_html('ret.html',index=False)
###出力結果
his_list = ['U.C.0001', 'U.C.0079', 'U.C.0080', 'U.C.0081', 'U.C.0083', 'U.C.0084', 'U.C.0087', 'U.C.0088', 'U.C.0089', 'U.C.0090', 'U.C.0091', 'U.C.0092', 'U.C.0093', 'U.C.0094', 'U.C.0096', 'U.C.0097', 'U.C.0099', 'U.C.0100', 'U.C.0104', 'U.C.0107', 'U.C.0120', 'U.C.0122', 'U.C.0123', 'U.C.0133', 'U.C.0136', 'U.C.0140', 'U.C.0149', 'U.C.0169', 'U.C.0203', 'U.C.0218', 'U.C.0223', 'U.C.0653', 'U.C.1000'] tit_list = ['機動戦士ガンダム', '機動戦士Ζガンダム', '機動戦士クロスボーン・ガンダム', '機動戦士ムーンガンダム', '機動戦士Vガンダム', '機動戦士SDガンダム', '機動戦士ガンダムUC', '機動戦士ガンダム0080 ポケットの中の戦争', '機動戦士ガンダム 逆襲のシャア', '機動戦士ガンダム THE ORIGIN', '機動戦士ガンダム サンダーボルト', '機動戦士ガンダム 逆襲のシャア ベルトーチカ・チルドレン', '機動戦士ガンダム 閃光のハサウェイ', '機動戦士ガンダム シルエットフォーミュラ91', '機動戦士ガンダム 第08MS小隊', '機動戦士ガンダム MS IGLOO', '機動戦士ガンダム戦記 ', '機動戦士ガンダム0083 STARDUST MEMORY', '機動戦士ガンダム カタナ', '機動戦士ガンダム0083 REBELLION', '機動戦士ガンダム エコール・デュ・シエル', '機動戦士ガンダムΖΖ', '機動戦士ガンダムΖΖ外伝 ジオンの幻陽', '機動戦士ガンダム ', '機動戦士ガンダム MSV', '機動戦士ガンダム ジオンの再興', '機動戦士ガンダム U', '機動戦士ガンダム Twilight AXIS', '機動戦士ガンダムNT', '機動戦士ガンダム ムーンクライシス', '機動戦士ガンダムReon', '機動戦士ガンダムF90', '機動戦士ガンダムF91 フォーミュラー戦記0122', '機動戦士ガンダムF91', '機動戦士ガンダム CD', '機動戦士ガンダムさん', '機動戦士ガンダム 鉄血のオルフェンズ', '機動戦士ガンダムUC RE', '機動戦士ガンダムII 哀・戦士編', '機動戦士ガンダムIII めぐりあい宇宙編', '機動戦士ガンダム0083 ', '機動戦士クロスボーン・ガンダム外伝', '機動戦士Vガンダム外伝'] hap_list = ['一年戦争', 'レジオン建国戦争', 'ラプラス戦争', 'マフティー戦争', 'コスモ・バビロニア建国戦争', 'ザンスカール戦争', '独立戦争', '最終戦争', 'ジオン独立戦争', 'グリプス戦役', 'オールズモビル戦役', '第一次オールズモビル戦役', '第二次オールズモビル戦役', '木星戦役', 'デラーズ紛争', '高烈度紛争', '第一次ネオ・ジオン抗争', '第二次ネオ・ジオン抗争', '第三次ネオ・ジオン抗争', '内部抗争']
補足情報
pythonのバージョンは3.6.5
/home/urai/crawling/gandamu/gandamu uchuuseiki/1.htmlの内容は
Wikipedia記事「宇宙世紀」のHTMLデータとなっております。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/30 02:07
2018/11/30 02:11
2018/11/30 02:15
2018/11/30 02:18
2018/11/30 02:30
2018/11/30 02:34
2018/11/30 02:38