どうも、Pythonを主軸に開発を行っている学生エンジニアのirohasです。
今回はPythonでよく使われているスクレイピングで開発を行ってみたので共有します。
*なお今回の記事はある程度スクレイピングの知識がある人向けですので、解説などはしません。
ある時、ポケモンの名前のデータが欲しいと思いサイトを見ていたのですが、皆さんご存じの通りポケモンはめちゃくちゃ数が多いので手作業でEXCELなどにまとめていては大変です。
そこでスクレイピングでEXCELに格納までやればよくね?となったので、とりあえずまずは第一世代のポケモンだけ出力するコードを作成しました。
全てのポケモンを出力するやつは暇なときにまた作ります。
それではまず、コードの全体像からです。
import csv
from os import write
import urllib.request
from bs4.dammit import encoding_res
import pandas as pd
from bs4 import BeautifulSoup
header = [ "name"]
url = "https://pokemondb.net/pokedex/national"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0"
}
request = urllib.request.Request(url, headers=headers)
html = urllib.request.urlopen(request)
soup = BeautifulSoup(html, 'html.parser')
div = soup.find("div", class_ = "infocard-list infocard-list-pkmn-lg").find_all("span", class_ = "infocard-lg-data text-muted")
with open("csv/pokemon_name.csv", "w", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(header)
for pokemon in div:
_name = pokemon.find(class_ = 'ent-name').text
row = [_name]
writer.writerow(row)
今回はポケモンの名前が英名で登録されているPokemon Databaseさん("https://pokemondb.net/pokedex/national")の記事を利用させていただきました。
スクレイピングで取得した際に、アクセスが拒否られてしまったので"user-agent"を用いてアクセスさせていただきました。
コードを実行すると、指定フォルダにCSVが格納されるので、Pandasを使って確認します。
import pandas as pd
df = pd.read_csv("csv/pokemon_name.csv")
print(df)
出力結果は下記のようになりました。
name
0 Bulbasaur
1 Ivysaur
2 Venusaur
3 Charmander
4 Charmeleon
.. ...
146 Dratini
147 Dragonair
148 Dragonite
149 Mewtwo
150 Mew
無事第一世代のポケモンがCSVに保存されていることが確認できます。
これにて完成です。
いやはや、スクレイピングってほんと便利ですね。
これからも大きなデータとか欲しいときはお世話になりそうです。