Python勉強①:よく使うWebスクレイピングをやってみる

私はずっとIT業界でエンジニアとして働いてきておりますが、いわゆるプログラマとして働いたことはありません。

学生時代にプログラムを少し勉強していたこともあり、簡単なものであればソースコードを読むことに抵抗もないくらいの知識はあります。

その程度の知識でも、これまで不自由はなかったのですが、やはりPythonなどの軽量言語がでてきて、使わなくてもできるけど、使って自動化とかをすればより良い業務環境を作れる、ということがいっぱいあることにも気づきます。

ただし、どんな簡単なプログラムでも、作るとなると時間がかかるため、それだったら力技で進めた方が早い、という状況になることが多いです。

この状況を打破したい思いがあり、一歩ずつPythonの学習を進めていければと考えております。

Pythonの勉強、何からやる?

勉強ですので、続くか続かないかは、何からやるにかかっていると思います。

Pythonエンジニアとして働いていきたいというのであれば、きちんと教科書を読んで勉強していく必要があると思います。

しかし、Pythonエンジニアとして働いていけるとまでは思っておらず、自分や周りのメンバの業務を楽にできればよいな、という程度の場合、教科書での勉強では続かないと思います。

そこで、やはり実際に手を動かしながら、トライアンドエラーで進めたいと思っています。

そうなると、自分の日々の業務の中で、定常的に発生する業務、もしくは行為って何だろうと考えたところ、まずは以下の2つが思いつきました。

・何かしらのWebサイトにログインして、記載をチェックしたり、ダウンロードしたりといったWebスクレイピング
・各種システムから取得したデータ(ExcelやCSVなど)の整理・成形

このように、何となく面倒だなと感じている業務や、毎回同じことをやっていると感じる業務といった最大公約数的な業務を見つけて、Pythonに置き換えることで少しでも簡単にならないか、という視点で考えていきたいと思います。

そこで、まずはWebスクレイピングから整理していこうと思います。

みなさまの中でも、仕事だけでなく、毎日や毎週チェックしているようなサイトがあったりすると思います、

それを都度ログインして確認して、必要なデータを取得してといったことに煩わしいときもあると思います。

そんなときに、自動でWebサイトの情報を集めてくれるようなものがあったら良いと思わないでしょうか。

そのようなときの基礎となるのが、Webスクレイピングだと思います。

PythonでWebスクレイピングをやってみる

私のプログラミング知識としては、学生時代に習ったC言語などのため、コンパイルが必要であったり、初心者にはとっつきにくいものだと思います。

それに対して、Pythonはやはり非常に取りかかりやすいですので、まずは試してみましょう。

・ブラウザを使ってサイトにアクセス、必要に応じてログイン

※ここではAPI経由での取得ではなく実際にブラウジングする方法となります。アクセスするサイトによってはこの方法は好ましくない手法である可能性もありますのでご注意ください。

私は、Seleniumを利用しました。

from selenium import webdriver

また、WebDriverを介してブラウザを操作するため、WebDriverのインストールも必要になります。

こちらは、利用されているブラウザの種類ごとに存在しますので、対象のものをインストールします。

インストールといっても、対象のドライバーをダウンロードして解凍するだけになります。
https://sites.google.com/a/chromium.org/chromedriver/downloads

ここまで準備できればあとはコードを書くだけです。

# ブラウザを開く。
driver = webdriver.Chrome()

# 対象のページを開く
driver.get("URL")

これを実行することで、ブラウザが勝手に起動し、URLで指定したページが表示されるかと思います。

案外イメージがつかないのが、driver.getのdriverってなんだ?ということで、ここを説明している文章ってあまりないと思います。小難しい説明はあると思いますが。

ざっくり言ってしまうと、driverという名前でブラウザを開いたという感じで、そこに、.getをつけることで開いたブラウザからgetの処理をするというイメージになります。

・開いたページから必要な情報を取得する、取得するためのアクションを行う

ここからは、何をやりたいかによって、大きく変わってくるため1例となります。

おそらく必須になることとして、表示されているページの中で、自分が欲しいデータがどこに記載されているかを見つけることになります。

これは、ページを開いたときに目に見える名前ではなく、HTML内で付けられている名前(属性)を取得し指定する必要があります。

ここでは、find_elementを使ってみます。

よくあるのは、ログインページが表示されるため、ユーザ名を入力するボックスや、パスワードを入力するボックスを見つける必要があります。

# サインイン
from_user = driver.find_element_by_name("username")
from_user.clear()
from_user.send_keys(ユーザ名)

from_pass = driver.find_element_by_name("password")
from_pass.clear()
from_pass.send_keys(パスワード)

singin_btn = driver.find_element_by_name("submit")
singin_btn.click()

上記のusernameやpasswordというのが、ページ内で対象のボックスにつけられている名前になります。

こちらを見つける方法は、Chromeなどで右クリックし検証を選択したときに表示されるコンソールで見つけることができます。
※これはかなり便利ですので、覚えておいて損はないと思います。

右クリック->検証” class=”wp-image-82″ srcset=”https://surooia-blog.com/wp-content/uploads/2021/05/2ded1ed71c5a3669fca633f095a4f262-300×146.png 300w, https://surooia-blog.com/wp-content/uploads/2021/05/2ded1ed71c5a3669fca633f095a4f262-1024×500.png 1024w, https://surooia-blog.com/wp-content/uploads/2021/05/2ded1ed71c5a3669fca633f095a4f262-768×375.png 768w, https://surooia-blog.com/wp-content/uploads/2021/05/2ded1ed71c5a3669fca633f095a4f262-940×459.png 940w, https://surooia-blog.com/wp-content/uploads/2021/05/2ded1ed71c5a3669fca633f095a4f262.png 1078w” sizes=”(max-width: 300px) 100vw, 300px”></figure>



<figure class=オブジェクトを調べる

ここまでで対象のデータを見つけることができますので、後は何をやりたいかによって細かくなってきますのでそれは別の機会にしたいと思います。

ちなみに、まだ私の中で解決はできていないのですが、上記でいうと1つのページの中に、usernameという名前がついている要素が複数ある場合があります。

その場合にうまく対象のものを指定するやり方を見つけたいと思っております。
※name以外のメソッドを使う、というのはもちろん確認済みですが、それでもできない場合となります。

すごく不格好だと思いますが、私のいまの対処法

save_btn = driver.find_elements_by_class_name("ボタンの名前")
save_btn[5].click()

とりあえず、同じ名前のものを全部リストとして取得する。

その中で何番目が対象のものかを1つずつ試す。

※上記例は、保存ボタンを押したかったのですが、複数あったため、save_btn[*]の*の部分を0から順番に試して5つ目だった、という感じです。

まとめ

Pythonについて勉強したいとは思いながら、いざ手を動かすと時間がかかってしまうため、なかなか進まないのが現状です。

今回1つ記事を書いてみましたが、きちんと勉強しながらやっているというよりは、手を動かしておかしくなったらGoogleで検索して調べて、という形でやっているためまとまりのないものになってしまっていると思います。

ただ、私と同じようなレベルの方の場合、同じようなところで躓いたりすることもあると思います。

うまくいっている事だけでなく、まだできていないことなども含めてまとめていくことで、同じ悩みの解決に割く時間を短縮するといったことにつながれば良いと思います。

Pythonは非常に取り掛かりやすいプログラミング言語だとは思いますので、興味がある方の手を動かすきっかけになれば嬉しく思います。

参考記事:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA