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

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

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

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

Q&A

解決済

1回答

637閲覧

BeautifulSoupを使って動的なページのスクレイピングをしたい

hiroandstitch

総合スコア5

Python

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

0グッド

0クリップ

投稿2022/12/09 14:29

編集2022/12/10 15:46

BeautifulSoupを使って動的なページのスクレイピングをしたいのですが、つまづいております。

動的なページでclassのxxxが存在する場合としない場合があり、存在しない場合は『AttributeError: 'NoneType' object has no attribute 'string'』のエラーメッセージが出でしまうので、
エラーメッセージを出さずに、xxxが現れるまでループさせるようにするにはどのようにしたらよいでしょうか。

python

1while True: 2 driver.refresh() 3 time.sleep(60) 4 page_source = driver.page_source 5 soup = BeautifulSoup(page_source, 'html.parser') 6 AAA = soup.find(class_='xxx').string 7 print(AAA) 8 9 break 10``

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

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

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

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

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

yuma.inaura

2022/12/09 14:39

コードはコードブロックで囲いましょう
hiroandstitch

2022/12/09 14:48

指摘ありがとうございます。囲いました。
meg_

2022/12/09 15:23

> xxxが現れるまでループさせるようにする 待っていれば現れるのですか?
hiroandstitch

2022/12/09 15:39

現れている時と現れてない時があるので、リロードをして最新状況を確認するようにしたいです。ずっと現れてる時もあれば1日に数分しか現れてないときもあります。
hiroandstitch

2022/12/09 15:45

現れている状態の時に値が取れることは確認しております。
hoshi-takanori

2022/12/09 17:44

スクレイピングで毎分アクセスとか嫌がらせでは。また、動的なページはブラウザ上で JavaScript を実行して表示内容を生成してるわけですが、BeautifulSoup には JavaScript を動かす機能はないような…。
meg_

2022/12/10 00:12

hoshi-takanoriさん 質問やコードに明記はされていませんが、おそらくSeleniumを使用しているのでしょうね。「1日に数分しか現れてないときもあります」というデータをスクレイピングで取得したい、とういのは現実的ではないと私も思います。
meg_

2022/12/10 00:15

> 現れている時と現れてない時があるので、リロードをして最新状況を確認するようにしたいです。ずっと現れてる時もあれば1日に数分しか現れてないときもあります。 どのようなサイトか知りませんが、APIは用意されていませんか?サイトをスクレイピングで監視するのは推奨されないでしょう。頻繁なアクセスは攻撃とみなされてブロックされる可能性があるかと思います。
guest

回答1

0

ベストアンサー

try-except文で、エラーをキャッチすれば良いのではないでしょうか?

以下、サンプルコードとなります。

while True: time.sleep(60) try: AAA = soup.find(class_="xxx") print(str(AAA)) break except AttributeError as e: print("AttributeErrorエラーが発生しました。") print("処理終了")

投稿2022/12/10 00:16

dtakkiy

総合スコア88

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

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

hiroandstitch

2022/12/10 05:54

ご教示いただきありがとうございます。試してみたのですが、現れていないときは"AttributeErrorエラーが発生しました。"ではなく"none"‘が帰ってきて処理終了となってしまいました。
hiroandstitch

2022/12/10 06:46

上記回答がヒントとなり、解決しました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問