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

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

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

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

Q&A

1回答

1019閲覧

表示/非表示が切り替わるtdの値も一緒にスクレイピングしたい。

menume

総合スコア13

Python

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

0グッド

0クリップ

投稿2022/04/18 06:27

編集2022/04/18 08:08

■やりたいこと
pythonとseleniumで、
下記HTMLタグがあり、下記pythonコードで商品名、価格をスクレイピングしたかったのですが、価格情報が入ってこないのです。

自分で調べてなんとなくわかったことは、

①HPはjavascript動作しており、商品名「りんごやみかん」の横に、表示ボタンがあり、そのボタンをクリックすると、値段の列(2行目のtd)が表示される動作になっていました。

②HTMLタグを確認したところ、値段の<td>に「style="display: none;」が入っていました。このdisplayのnoneを①のjavascriptのボタンで切り替えて、表示/非表示を切り替えているんだと思います。ただ、セレニウムを起動させて、タグ情報がどこまでトレイルのかを確認したところ、下記HTMLのように価格のtd情報をまで抜けているようなので、noneのせいで情報を引っ張ってこれてないのだと思っているのですが。

商品名、価格情報を抜く方法をお分かりの方がおられましたらご教示お願いできないでしょうか。
ちなみに商品数は100ぐらいあるため、商品数は2個にしております。

python

1driver = webdriver.Chrome() 2driver.get('URL') 3 4#↓投稿時に間違ってました 5##result=driver.find_elements_by_xpath("//*[@id='search-result-area']") 6result=driver.find_elements_by_xpath("//*[@id='ida']/tbody/tr/td") ←修正しました。 7 8#要素数ループさせて中身を確認する 9kaisu=len(result) 10 11for kakunin in kaisu: 12 print(kakunin,"の回数目確認") 13 print(f'{result[kakunin].text = }')

HTML

1<table id="ida" class="igsv-table dataTable no-footer dtr-inline collapsed" lang="ja" style="width: 600px;" role="grid" aria-describedby="id_info">` 2 <thead> 3 <tr id="ida-r-1" class="r-1 odd" role="row"> 4 <th class="col-1 odd sorting_asc" tabindex="0" aria-controls="ida" rowspan="1" colspan="1" style="width: 520px;"> 5 <div>商品名</div> 6 </th> 7 8 <th class="col-2 even sorting" tabindex="0" aria-controls="ida" rowspan="1" colspan="1" style="width: 80px;"> 9 <div>値段</div> 10 </th> 11 </tr> 12 </thead> 13 14 <tbody> 15 <tr id="ida-r-19" class="r-19 odd" role="row"> 16 <td class="col-1 odd sorting_1" tabindex="0">りんご</td> 17 <td class="col-2 even" style="display: none;">¥300</td> 18 </tr> 19 20 <tr id="ida-r-18" class="r-18 even" role="row"> 21 <td class="col-1 odd sorting_1" tabindex="0">みかん</td> 22 <td class="col-2 even" style="display: none;">¥100</td> 23 </tr> 24 25 </tbody> 26</table>

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

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

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

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

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

guest

回答1

0

JavaScriptで対象要素を特定する必要がありますが、出来ます。サンプルですが、

Python

1foo = driver.execute_script("return document.querySelector('#foo').textContent")

CSSセレクターを「何番目のtd」とか動的に組み立てる必要がありそうですね。

別案としては、driver.page_sourceをBeautifulSoup等で解析する。

投稿2022/04/18 08:01

otn

総合スコア86277

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

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

otn

2022/04/18 08:04

必要要素をループして全部取得するような長いJavaScriptにして、JSON形式で return する手もありますね。
menume

2022/04/18 08:11

ご教示ありがとうございます。 >CSSセレクターを「何番目のtd」とか動的に組み立てる必要がありそうですね。 そうなんですよね。それをしてしまうとおっしゃられるように、ループで回す必要が出てきそうなので、さらにわからなくなってしまったので。 >別案としては、driver.page_sourceをBeautifulSoup等で解析する。 BeautifulSoupってseleniumといっしょに使えるんですか。 BeautifulSoupは、まったくわかってないので今のところ理解が追い付いていないです。 すみません。
otn

2022/04/18 08:58

> BeautifulSoupってseleniumといっしょに使えるんですか。 BeautifulSoupは、文字列になったHTMLやXMLを解析するツールなので、問題なく使えます。 JavaScriptでのプログラミング経験があれば、コメントに書いた方法が良いと思いますが、無いならBeautifulSoupでしょうか。
menume

2022/06/07 21:47

BeautifulSoupを理解して、ソースを書き直すのに時間がかかりそうな状況です。 もう少し頑張ってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問