4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonスクレイピング---BeautifulSoupかSeleniumか(自分用)

Last updated at Posted at 2021-12-12

###BeautifulSoupを使うべきか、Seleniumを使うべきかの判断方法について紹介します。

クラウドソーシングでお小遣い稼ぎをしていたら、先日BeautifulSoupのみによるwebスクレイピングを依頼されました。
seleniumを使かわないのか!おっしゃ楽勝楽勝!と意気揚々と制作にとりかかったわけですが、とあるデータの取得が上手くいかない…。
悪戦苦闘すること数時間してようやっとBeautifulSoupでは不可能だという結論に辿りつきました。

なので、同じような無駄な時間を過ごさないように知識を保存します。

##BeautifulSoup
HTMLやXMLファイルからデータを取得し、解析するPythonのWEBスクレイピング用のライブラリ
web上の静的なデータのみ 取得できます。
情報をもとにブラウザを立ち上げないので非常に高速です。

##Selenium
Selenium は Web ブラウザの操作を自動化するためのWEBスクレイピング用のライブラリ
静的なデータだけでなく動的なデータ の取得もできます。
その他、クリック操作やキー入力などスクレイピングでやりたいことは正直なんでもできます。

「なんだーじゃあselenium一択じゃん」って感じですが、ちゃんとデメリットがあります。
BeautifulSoupと違い、毎回chromeなどブラウザを立ち上げるのでかなり遅速です。もちろん手作業よりは断然早いのですが、タブを100個開きたいとかとなると馬鹿になりません。

なので、現実的なスクレイピングの方針としては、大枠はseleniumを用いつつ、BeautifulSoupが使える場面では積極的にBeautifulSoupを使うという流れになるとか思います。
まぁそれくらいは私も理解していたんですが、その境界が曖昧でした。

##要は
取得したいデータが動的なのか静的なのか分かればいい訳です。
静的データ:ユーザーに対して、Webサーバーが要求されたデータをそのままブラウザに送信したもの。
      毎回同じものが表示されます。
動的データ:JavaScriptなどが裏で色々処理をすることで、表示されるものを都度変えています。
      そのため、アクセスのタイミングに応じて内容が異なります。

##判別方法
長々と書いておいて、判別方法は簡単です。
調べたいchrome上で、**「CTR + U」**を押すとサイトのソースが確認できます。

image.png
                   ↓↓↓(ズラ~~)
image.png

これがサーバから送られてきた静的データです。
BeautifulSoupはこれを読み込んでいるだけなので早いのです。
このソースの中に調べたい要素があればBeautifulSoupで事足ります。(CTR + Fなどで)
なければ、Seleniumを用いる必要があります。

以上、こんな感じです。
常識なのかもしれませんが、スクレイピングに関するサイトであんまり見かけなかったので今回苦労しました。

でも、スクレイピングしたいデータに限って動的なものが多いので結局Seleniumしか勝たん…

##参考サイト
ブラウザレンタリング:https://qiita.com/sasakiki/items/91dcc8b50d7a61ce98bc

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?