LoginSignup
2
6

More than 1 year has passed since last update.

Pythonで第一世代のポケモンをすべてCSVに出力してみた。

Last updated at Posted at 2021-10-16

どうも、Pythonを主軸に開発を行っている学生エンジニアのirohasです。
今回はPythonでよく使われているスクレイピングで開発を行ってみたので共有します。
*なお今回の記事はある程度スクレイピングの知識がある人向けですので、解説などはしません。

ある時、ポケモンの名前のデータが欲しいと思いサイトを見ていたのですが、皆さんご存じの通りポケモンはめちゃくちゃ数が多いので手作業でEXCELなどにまとめていては大変です。
そこでスクレイピングでEXCELに格納までやればよくね?となったので、とりあえずまずは第一世代のポケモンだけ出力するコードを作成しました。
全てのポケモンを出力するやつは暇なときにまた作ります。

それではまず、コードの全体像からです。

index.py
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を使って確認します。

reading.py
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に保存されていることが確認できます。
これにて完成です。

いやはや、スクレイピングってほんと便利ですね。
これからも大きなデータとか欲しいときはお世話になりそうです。

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6