「よしやってやるか」と意気込んで、結果出来なかった時の悲しさ、悔しさといったら計り知れませんよね。
Pythonにもあります。
Webページの情報は楽勝で取れちゃうぜ〜、楽勝、楽勝♡
とか思ってたら、全然出来ないことが発覚しました。HTMLやJavascriptをちゃんと理解しないといけないですね(そりゃそうや)
“iframe”という存在を知らなかった。。。
なぜデータが取れない!
結論はシンプルでWebの構造を把握していないから。
Webの構造を全て把握している方からすれば、「そんなわけないでしょ」と言われてしまうのかもしれませんが、
私の場合、Webは全部HTMLとCSSで構成されてるんだから、URLさえわかればBeautifulSoupとか使って全部取れるんでしょぐらいに思ってました。
残念ながら、全くWebの構造を把握できてなかったです。次に紹介するiframeというのを聞いたことがありませんでした。
しかし、データを取れなかったことで原因を調査し、さらなる理解へと繋がるので、諦めず共に頑張りましょう。
iframeとは
そもそもWebページは基本としてHTMLとCSSできれいに情報がページにまとめられています。
そして、Javascriptなどによってさらなる機能を該当ページ内に追加することが可能になっています。
その機能の一つとしてあるのが、iframeです。インラインフレームと呼ばれています。
よく目にするのが、ログインページがこのiframeで構成されているパターンです。その場合は指定したURLとは別ページとして扱われるため、iframe内の指定されたURL(src)を読み込んで、ログインIDやパスワードを入力する必要があります。
やり方は難しくありません。iframeのタグを見つけたら、iframeの情報を手に入れて、そこに移動するだけです。そのあとは普段通りスクレイピングを行うことになります。
iframeからデータを取得するには
iframeに移動するのにDriverを用いますので、事前にGoogleChromeDriverなどを用意しておく必要はあります。
あとはスクレイピングするコードの初めの方に以下のコードを入力するだけです。
driver.get("スクレイピングしたいURLを入力")
iframe = driver.find_element_by_id("#iframe内のid名")
driver.switch_to.frame(iframe)
- 1行目:スクレイピングしたいページのURLを読み込み
- 2行目:iframe内で指定されているidからiframeを特定する
- 3行目:2行目で特定したiframeのページへ移動(スクレイピング対象を切り替える)する
まとめ
- iframe内に入っている情報はdriverで対象を切り替える必要がある。
- HTML、Javascriptを理解すること。
プログラミング初学者がPythonの勉強を始める場合はHTML、CSSやJavascriptといったWebページを構成する言語の理解を同時並行で進めていく必要はありますね。
単体で勉強するよりはまとめてやったほうが、それぞれの繋がりを理解しやすくいいのではないかと思います。(思いたい)
コメント