質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

645閲覧

for文で取得している表形式のデータをCSVファイルの表にしたい

wata1nabe1

総合スコア0

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/13 01:59

for文で取得している表形式のデータをCSVファイルの表にしたい

Pythonの練習として、ポケモン図鑑からポケモンの情報をスクレイピングして
CSVファイルの表として保存したいと思っています。
※Colaboratoryを活用しています

発生している問題・エラーメッセージ

AttributeError: 'str' object has no attribute 'keys'

該当のソースコード

python

1min_page = 1 2max_page = 10 3 4while min_page <= max_page: 5 zukan_url = "https://zukan.pokemon.co.jp/detail/" + str(min_page) 6 r = requests.get(zukan_url) 7 soup = BeautifulSoup(r.content, "html.parser") 8 poke_part = soup.find_all("script", {"type": "application/json"}) 9 10 for i in poke_part: 11 poke_data = i.get_text() 12 a = json.loads(poke_data) 13 df = pd.json_normalize(a["pokemon"]) 14 labels = ['no', 'name', 'omosa', 'takasa', 'bunrui', 'spec_hp', 'spec_kougeki', 'spec_bougyo', 'spec_tokukou', 'spec_tokubou', 'spec_subayasa', 'image_s'] 15 df = df[labels] 16 with open("/content/drive/MyDrive/Colab/pokemon_file.csv", mode = "w") as f: 17 wr = csv.DictWriter(f, labels) 18 wr.writeheader() 19 wr.writerows(df) 20 21 min_page += 1

試したこと

forループの中で、1つ1つ分断したpandasの表形式のデータを取得しているので
うまく読み込むことができないんだと思っています。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Pythonの練習ということですので、コードを書くことは止めて、ヒントだけ書いておきます。

  • for文で取得している表形式のデータをCSVファイルの表にしたい

とのことですが、取得できていないようです。

Python3 の Scraping 基礎(JSON)によく似たコードが書かれていますが、ポケモンずかんのhtmlの中身は形式が違うのでget_textでは取得できないようです。
こういうのを調べてできるようになるのが練習ですので、安易に人に聞かずに勉強してください。

そういう問題をクリアして書込みができるようになっても、with openの使い場所の関係で別の問題が発生するでしょう。
これも勉強の一環ですので、ご自身でがんばってください。

  • 勉強方法のアドバイス

何をすれば良いかが分からないときには、dirやドキュメント文字列を見ましょう。
たとえばBeautifulSoupの使いかがわからないなら

python

1dir(BeautifulSoup) 2print(BeautifulSoup.__doc__) 3

を実行すれば、手がかりを得ることができるでしょう。

soupの性質やメソッドなどを知りたければ

python

1dir(soup) 2print(soup.__doc__)

を実行すれば、手がかりを得ることができるでしょう。

英語が不得意ならば、Google翻訳DeepL翻訳を使いましょう。

Pythonについては公式ドキュメントBeautifulSoupについては、Beautiful Soup Documentation
を読みましょう。

今回の場合は、HTMLについての勉強も必要でしょう。

投稿2021/10/13 03:01

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問