Help us understand the problem. What is going on with this article?

ColaboratoryでSeleniumが使えた:javascriptで生成されるページも簡単スクレイピング

(2019年3月に新たに発生したエラーをご報告いただきましたので、2019/3/24に更新、また動くことを確認しました。)

実際に動いたコード

ColaboratorySeleniumを動かす方法を探している人のために、2018年12月現在、動いたコードを貼っておきます。上から順にColaboratoryのコードセルに貼っていくだけです。これでJavascriptで生成されるページのスクレイピングもColaboratoryで簡単にできます。 それ何、と思った人は、この下に背景などを書きましたので、ご覧下さい。便利ですよ!

#Chromiumとseleniumをインストール
#「!」印ごとColaboratoryのコードセルに貼り付けます。
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium
#SeleniumとBeautifulSoupのライブラリをインポート
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
# ブラウザをheadlessモード(バックグラウンドで動くモード)で立ち上げてwebsiteを表示、生成されたhtmlを取得し、BeautifulSoupで綺麗にする。
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=options)
driver.implicitly_wait(10)
driver.get("https://スクレイピングしたいサイトのURL")
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, "html.parser")
print(soup.prettify())

あとは、HTMLタグを確認して欲しい内容を拾っていくなど普通のスクレイピングと手順は同じです。

背景

保険スタートアップのjustInCaseにはいろんな人がパートタイムでお手伝いに来てくれています。先日、CTOの@hkzmが、お手伝いに来て下さっているExcelの達人にPythonでデータ解析をやって頂こう、ということでGoogle Colaboratoryを紹介していました。横で眺めていて、Colaboratoryは設定なしでお手軽にPythonが使えるというだけでなく、Google Team Driveで共有できるので便利だということを知りました1。 ちょうど業務で、手でコピペしてたら死ぬ、という案件がありましたので、早速スクレイピングに使ってみることにしました。

おさらい:ColaboratoryでPythonを使った普通のスクレイピング

1件目は普通のスクレイピングで問題なく出来ました。ColaboratoryでPythonを使ってスクレイピングする方法には初心者向けの素晴らしい良記事がnoteにあって、本当に書いてある通りやれば私にもさくさく出来ました。大変おすすめです。

問題発生:javascriptで生成されるサイト

ところが、あるサイトが同じやり方では中身が取れないのです。どうやらjavascriptで生成されるサイトは、普通のやり方では出来ないようなのでした。で、色々調べた結果、Seleniumというライブラリを使えば出来そうだったのですが、あちこちで紹介されていたコードとColaboratoryでは相性が悪いのか、なかなかうまく行かず。Qiitaでも上手く行かない報告がいくつか上がっていたりしました。サポートが終了してレポジトリがアーカイブされているらしいphantomJSというwebDriverを使うやり方は見つかりましたが、今から幽霊ドライバー:ghost:を使うのはちょっとためらうかも。。。

解決策発見

で、探しまくって、stackoverflowで今月に回答されたやり方2でようやく動きました。 それが上に書いたコードです。このやり方だと、PhantomJSも使用しません。

なお、スクレイピングをするときは、本当に必要な情報だけを相手のサイトにご迷惑をおかけしないで取得するよう、用法・容量を守ってやりましょう。Enjoy!


  1. Team Driveを使うにはチームでGsuiteを使っている必要があります。Gsuiteのサイトから入って、次のプロモーションコードを入れると、Gsuite Businessプラン初年度の利用料金が20%引きになります。 T4UQLVFADL9FLR4  

  2. https://stackoverflow.com/questions/53532060/webdriverexception-message-service-content-chromedriver-unexpectedly-exited 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした