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

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

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

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

Q&A

解決済

1回答

11173閲覧

〔Python〕" AttributeError: 'NoneType' object has no attribute 'find_all' "とエラー表示されてしまった。

Rwight

総合スコア63

Python

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

0グッド

0クリップ

投稿2021/07/18 11:34

前提・実現したい事

お忙しい中ありがとうございます。
今回は『Python 2年生 スクレイピングのしくみ』の本で勉強をしていたら[P.56]の場所で下のようなエラーコードが発生しました。
実現したい事のターミナルみたいに表示したいのですがエラーが表示されてしまいました。

ソースコード

py

1import requests 2from bs4 import BeautifulSoup 3 4load_url = "https://news.yahoo.co.jp/categories/it" 5html = requests.get(load_url) 6soup = BeautifulSoup(html.content, "html.parser") 7 8topic = soup.find(class_="topicsList_main") 9 10for element in topic.find_all("a"): 11 print(element.text)

エラーコード

Error

1AttributeError: 'NoneType' object has no attribute 'find_all'

実現したい事

Terminal

1告白はSNS 10代の恋愛事情 2独禁法 米がGoogle調査へ 3昭和感? 大阪府警の動画話題 4成田で搭乗「顔パス」導入へ 5スマホに著作権料上乗せ 要請 6上場のUber 赤字1100億円 7システム障害で診察制限 長崎 8仮想通貨 呼称は「暗号資産」

補足情報(現在使用している端末・アプリケーション・バージョンなど)

・Mac OS(Big sur) ・Python 3.9.5 64-bit ・VSCode(最新バージョン) ・Google Chome(最新バージョン)

もしも不備な点がございましたら〔質問への追記・修正依頼〕を宜しくお願い致します。
お忙しい中ありがとうございました。

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

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

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

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

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

guest

回答1

0

ベストアンサー

AttributeError: 'NoneType' object has no attribute 'find_all'

'NoneType' には、'find_all'というアトリビュートは存在しません、といってます。
find_all ってのがくっついてる変数になにが入ってるのか確認してみよう

投稿2021/07/18 11:39

y_waiwai

総合スコア88042

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

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

Rwight

2021/07/18 11:50

y_waiwai さん回答ありがとうございます。 aタグを全てというふうに指定していますがその部分が間違えているのでしょうか?
y_waiwai

2021/07/18 11:52

いやだから、その変数になにが入ってるのか確認してみようよ コードは全く読んでません
udon-ken

2021/07/18 11:58 編集

どこで間違えてる(間違えてなく正しい結果というのもありうる)のかわかりませんが、ともかく、 topic = soup.find(class_="topicsList_main") ここで、topicに代入されたのはNoneであるはずです(だから次の行でNoneにはそういうアトリビュートが無いとエラーが出された)。 ここに問題があるのか、これ以前の段階での問題を引きずってそうなったのか、そもそもNoneになるのが正しいのかは不明です。
Rwight

2021/07/18 12:15 編集

原因が発覚いたしました。 本書ののクラス名は <.Yahoo! デベロッパー ツール《旧》 > <ul class="topicsList_main"><ul> なのでこの時に実行していれば出来た物でした。 ですが.... 現在のYAHOO!は <ul></ul>でクラス名がない為、 この今回みたいなエラーが発生する事が分かりましたので報告します。 y_waiwai さんと udon-ken さん誠にありがとうございました。 大事な部分が抜けていました。 気づかしてくださってありがとうございました。 (理解が全く出来なくて申し訳ありませんでした。次はちゃんと確認するように致します。)
udon-ken

2021/07/18 12:22 編集

良かったですね。 何らかのメソッドで値を求めた時、値が無ければ(取得に失敗した時)Noneが返ってくるのはよくあることで、それをそのまま処理しようとして今回のようなエラーになるケースは多いです。 あ、、求めるというか、プロパティを参照して中身が入ってない時はNoneとかもあります。 なので、取得に失敗した時にどう処理するかを考えておくことが大事です。 例としてセイウチ演算子使うとこういう感じになります。 topicがTrue(値有り)じゃなければ実行しない。 if topic := soup.find(class_="topicsList_main"): _for element in topic.find_all("a"): __print(element.text)
Rwight

2021/07/18 13:02 編集

本当に今回は大事な事に気づきました。ありがとうございました。 ・デベロッパーツールをちゃんと確認をしていなかった事。 が今回の原因でした。 udon-ken さんのコメントも参考にさせていただきます。 本日は本当にありがとうございました。 「y_waiwai」さん と 「udon-ken」さん ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問