Beautiful Soupでwikipediaのページから料理名を抽出
景品のTシャツの為だけにAlexaスキルを開発中。
www.t88.work
「献立提案」といいつつ、
昨晩のメニューも
栄養バランスも
冷蔵庫の中身も
個人の好き嫌いも考慮せず、
ランダムに料理名を返すスキル。
せめて料理の種類ぐらいは増やしたい。
※現状、手打ちで適当に入れた、全7品目
頭に浮かんだものを入力していくのは限界がありそう*1。
なので、wikipediaの料理関連のページから料理名を抽出することにする。
道具として、python + Beautiful Soupを使用。
wikipedia 料理ページの確認
たとえば、「洋食」のページ。
ページ内に色々な料理名があることが分かる。
使えそうな感じ。
料理名は大体、その料理個別ページのリンクとなっている。
aタグで検索すれば、ゴミを巻き込みつつも、
料理名を抽出できそう。*2
pythonコード
必要なライブラリをインポート。
from urllib.request import urlopen from bs4 import BeautifulSoup import pandas as pd
複数ページから抽出するので、
一連の流れをまとめた自作関数を作成。
引数にデータ取得元のurlを受け取り、
urllibでHTMコンテンツを取得。
beautiful soupの.find_all('a')でaタグ部分を全て取得。
tag内のテキストのみ抽出し、pandasのseries構造にして返す。
#urlを指定し、aタグ内のテキストを抜き出す関数 def scraping(url): html = urlopen(url) bsObj = BeautifulSoup(html.read(),"html5lib") a_tag_list = bsObj.find_all('a') return pd.Series([x.text for x in a_tag_list])
目ぼしいページを探してきてスクレイピング。
#wikipediaページからスクレイピング list1 = scraping("https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E6%96%99%E7%90%86") #日本料理 list2 = scraping("https://ja.wikipedia.org/wiki/%E6%B4%8B%E9%A3%9F") #洋食 list3 = scraping("https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E6%96%99%E7%90%86") #アメリカ料理 list4 = scraping("https://ja.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%96%99%E7%90%86") #中華料理 list5 = scraping("https://ja.wikipedia.org/wiki/%E9%9F%93%E5%9B%BD%E6%96%99%E7%90%86") #韓国料理 list6 = scraping("https://ja.wikipedia.org/wiki/%E3%82%A4%E3%82%BF%E3%83%AA%E3%82%A2%E6%96%99%E7%90%86") #イタリア料理 list7 = scraping("https://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%AF%E3%82%A4%E6%96%99%E7%90%86") #ハワイ料理 list8 = scraping("https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%83%89%E3%83%8D%E3%82%B7%E3%82%A2%E6%96%99%E7%90%86") #イタリア料理 list9 = scraping("https://ja.wikipedia.org/wiki/%E3%83%AD%E3%82%B7%E3%82%A2%E6%96%99%E7%90%86") #ロシア料理
最終的に一つにまとめる。
#リストを統合
kondate_list = pd.concat([list1,list2,list3,list4,list5,list6,list7,list8,list9])
明らかなゴミを削除。
#重複値を除去 kondate_list = kondate_list.drop_duplicates() #半角英数字を含むものを除去 kondate_list = kondate_list[~kondate_list.str.match('.*[a-zA-Z0-9]')]
結果をcsvとして出力。
#csvに出力 ※使えるパラメータの関係でdataframeに変換 df = pd.DataFrame(kondate_list) df.to_csv('kondate_list.csv',index=False,line_terminator=',\n',quoting=1)
※この部分は本題ではないが、
alexaスキルの処理コード内への転記を想定して、
出力形式の調整を行っている。
line_terminator で末尾にカンマを付与。
quoting=1(QUOTE_ALL) で全ての要素をクォートする。
結果
こんな感じで料理名の抽出が出来た。
実際はゴミが沢山混じってるので、手作業で除去。
最終的に415種類の料理が残った。
[参考:料理名一覧]
ぼたもち,
団子,
すき焼き,
てんぷら,
寿司,
カレー,
ラーメン,
天ぷら,
レバ刺し,
カルパッチョ,
ユッケ,
タルタルステーキ,
焼肉,
ジャーキー,
干肉,
ビスケット,
クッキー,
縄文クッキー,
すいとん,
粥,
塩辛,
なれずし,
おこわ,
金山寺味噌,
点心,
うどん,
饅頭,
羊羹,
がんもどき,
カステラ,
コンペイトウ,
お好み焼き,
鉄板焼き,
カリフォルニアロール,
雑煮,
赤飯,
コンニャク,
麦飯,
はったい粉,
干柿,
煮こごり,
凍豆腐,
七草粥,
小豆粥,
草餅,
甘茶,
ちまき,
柏餅,
豆ごはん,
味噌田楽,
素麺,
年越しそば,
くさや,
島寿司,
けんちん汁,
おにぎり,
にぎり寿司,
江戸前寿司,
巻寿司,
ちらし寿司,
稲荷寿司,
押し寿司,
酢飯,
雑炊,
おじや,
茶漬け,
炊き込みご飯,
栗飯,
深川飯,
鯛飯,
五目飯,
混ぜご飯,
鰻丼,
天丼,
親子丼,
鉄火丼,
木の葉丼,
しらす丼,
麦とろ,
冷汁,
卵かけご飯,
煎餅,
冷麦,
味噌汁,
粕汁,
潮汁,
呉汁,
馬刺し,
鶏刺し,
おでん,
寄せ鍋,
ちり鍋,
掻き揚げ,
から揚げ,
薩摩揚げ,
油揚げ,
焼き魚,
焼き鳥,
卵焼き,
だし巻き卵,
薄焼き卵,
煮魚,
煮しめ,
甘露煮,
佃煮,
大和煮,
風呂吹き,
若竹煮,
昆布巻き,
煮びたし,
チャンプルー,
茶碗蒸し,
玉子豆腐,
飯蒸し,
蒲鉾,
竹輪,
はんぺん,
つくね,
おひたし,
ぬた,
胡麻和え,
トンカツ,
カレーライス,
しゃぶしゃぶ,
もつ鍋,
牛丼,
カツ丼,
豚汁,
肉じゃが,
生姜焼き,
もんじゃ焼き,
たこ焼き,
ハヤシライス,
オムライス,
コロッケ,
カキフライ,
エビフライ,
メンチカツ,
スパゲッティ,
ナポリタン,
たらこスパゲッティ,
納豆スパゲッティ,
クリームシチュー,
ドリア,
ピラフ,
ハンバーガー,
ライスバーガー,
テリヤキバーガー,
菓子パン,
総菜パン,
あんぱん,
クリームパン,
コロネ,
メロンパン,
カレーパン,
焼きそばパン,
カツサンド,
ショートケーキ,
生チョコレート,
スフレチーズケーキ,
ミル・クレープ,
プリンアラモード,
ダックワーズ,
冷やし中華,
担担麺,
長崎ちゃんぽん,
皿うどん,
餃子,
天津飯,
焼きそば,
タコライス,
カニカマ,
オートミール,
パスタ,
サラダ,
サンドイッチ,
ポークカツレツ,
とんかつ,
エスカロップ,
マカロニグラタン,
コンソメスープ,
ポタージュ,
ビーフシチュー,
ピカタ,
ステーキ,
どんどん焼き,
チキンバスケット,
ハンバーグ,
オムレツ,
ケチャップライス,
ハムエッグ,
ベーコンエッグ,
ハッシュドビーフ,
ビーフストロガノフ,
チキンライス,
鶏肉,
トマトケチャップ,
焼き飯,
カツレツ,
牛カツ,
豚カツ,
鶏カツ,
ポークソテー,
ムニエル,
ポトフ,
ロールキャベツ,
グラタン,
レトルト食品,
クラムチャウダー,
ベイクドビーンズ,
コーンスープ,
バーベキュー,
トルティーヤ,
ドーナツ,
ベーグル,
スコーン,
プレッツェル,
パンケーキ,
マフィン,
ワッフル,
フレンチトースト,
コーンブレッド,
ミートボール,
フェットゥチーネ・アルフレード,
フェットゥチーネ,
マカロニ・アンド・チーズ,
ジャンバラヤ,
シアトルロール,
フィラデルフィアロール,
ホッピン・ジョン,
チャウダー,
ヴィシソワーズ,
チキンスープ,
ピーナッツスープ,
ホットドッグ,
アメリカンクラブハウスサンド,
グリルドチーズサンドイッチ,
ピーナッツバターとジェリーのサンドイッチ,
ルーベンサンド,
ビーフステーキ,
ミートローフ,
ローストチキン,
フライドチキン,
テリヤキ,
ポークチョップ,
ローストターキー,
七面鳥,
バッファローウィング,
カントリー・キャプテン,
ゲフィルテ・フィッシュ,
シュリンプ・スキャンピ,
ソフトシェルクラブ,
クラブケーキ,
オイスター・ロックフェラー,
ホワイトソース,
フライドポテト,
マッシュポテト,
ハッシュドポテト,
テイタートッツ,
コールスロー,
シーザーサラダ,
コブサラダ,
アップルパイ,
パンプキンパイ,
ピーカンパイ,
キーライムパイ,
バンブルベリーパイ,
シフォンケーキ,
ジャーマンケーキ,
ジンジャーブレッド,
ブラウニー,
カンノーロ,
バナナプディング,
プリン,
パーシモンプディング,
ファッジ,
チョコチップクッキー,
シャーベット,
サンデー,
ミシシッピーマッドパイ,
チョコレート,
バナナスプリット,
エンゼル・フード・ケーキ,
デビルズ・フード・ケーキ,
コーンフレーク,
グラノーラ,
ポーク・アンド・ビーンズ,
チリコンカーン,
ポットパイ,
エッグベネディクト,
アメリカンドッグ,
チャプスイ,
小籠包,
ナシゴレン,
焼き餃子,
エビチリ,
酢豚,
八宝菜,
ラフテー,
北京ダック,
ジャージャー麺,
水餃子,
サンラータン,
ふかひれ,
シュウマイ,
チャーシュー,
雲吞,
エビ蒸しギョウザ,
上海ガニの蒸しガニ,
餛飩,
中華丼,
天津丼,
チャーハン,
ビーフン,
ワンタン麺,
炸醤麺,
エビのチリソース,
中華まん,
春巻き,
チンジャオロース,
中華スープ,
月餅,
マンゴープリン,
キムチ,
ナムル,
クッパ,
チゲ,
ビビンバ,
クレープ,
プルコギ,
チヂミ,
トッポッキ,
トースト,
ホットサンド,
たい焼き,
即席めん,
サムゲタン,
キムチチゲ,
純豆腐,
カルビ,
サムギョプサル,
タッカルビ,
タッカンマリ,
トッカルビ,
チャプチェ,
春雨,
炒飯,
肉まん,
天婦羅,
豚足,
今川焼き,
かき氷,
リゾット,
ラザニア,
ラビオリ,
ナポリピッツァ,
マルゲリータ,
マリナーラ,
クアットロ・フォルマッジ,
フォカッチャ,
ブルスケッタ,
ミネストローネ,
プロシュット,
パンチェッタ,
サラミ,
アクアパッツア,
フリット,
バーニャ・カウダ,
カプレーゼ,
ティラミス,
パンナ・コッタ,
生ハムメロン,
ポケ,
ゼリー,
芋羊羹,
白飯,
マカロニサラダ,
ポテトサラダ,
スパムむすび,
マラサダ,
ロコモコ,
ハンバーガー・ステーキ,
目玉焼き,
おむすび,
いなり寿司,
ライスヌードル,
ロミロミ,
サーモン,
フリフリ・チキン,
唐揚げ,
チキンカツ,
サーターアンダーギー,
羽二重餅,
ハロハロ,
肉団子,
丸焼き,
ミーゴレン,
即席ラーメン,
インドミー・ミーゴレン,
インスタントラーメン,
そぼろ,
アヤムゴレン,
焼売,
ワンタン,
シュークリーム,
ゆで卵,
錦糸玉子,
厚揚げ,
チャプチャイ,
ボルシチ,
ソーセージ,
ピロシキ,
ミートパイ,
ペリメニ,
ザワークラウト