LoginSignup
0
4

More than 1 year has passed since last update.

Google Cloud FunctionsでSeleniumがうまく動かなかったので、Phantom JS Cloudで代用した

Last updated at Posted at 2022-01-19

Google Cloud Functionsでスクレイピングを自動化

###ざっくり背景
もともとFXの自動取引で使用していたお名前VPSにPythonをインストールして、Windowsのタスクスケジューラでスクレイピングを自動化していましたが、

月々1,300円払ってスクレイピングするのも馬鹿らしくなったので、Google Cloud Functionsで動かすことにしました。

色々つまずきながらも、ほぼすべてのプログラムをGoogle Cloud Functionsに移管でき、ついに最後のプログラム。

最後のものが一番の難関でした・・・Selenium使っとる:sob::sob::sob::sob::sob:

###なぜSeleniumは面倒なのか
Javascriptで生成された動的なページの場合、BeautifulSoupではソースコードをうまく取得することができないため、部分的にSeleniumを使っていました。

で、SeleniumでスクレイピングするためにはWebDriverなるものを動かさないといけない。

そのためにはWebDriverをCloud Functionsにデプロイしなければいけない。

デプロイしても権限?の問題でなぜか動かせない。

  • 「Google Cloud Functions Selenium」
  • 「Google Cloud Functions webdriver」
  • 「GCF chromedriver」

とかとか、とにかく検索しまくって海外サイトも調べ漁っても答えが見つかりませんでした。

で、色々考えていたらPhantomJSのことを思い出しました。

PhantomJSCloud使えば一発だった

###サンプルコード
要はデプロイして手元で動かさずに、クラウドサービスに動かしてもらえばええやんって話。

sample.py
payload = {'url':'https://google.com/','renderType':'HTML','outputAsJson':'true'}
payload = json.dumps(payload)
payload = urllib.parse.quote(payload, safe = '')

phantomjs_key = 'API-KEY'
url = 'https://phantomjscloud.com/api/browser/v2/' + phantomjs_key + '/?request=' + payload

pj_res = requests.get(url)
pj_res = pj_res.json()
html = pj_res["content"]["data"]

soup = BeautifulSoup(html, 'html.parser')

PhantomJSCloudは無料プランだと1日500リクエストまで使えるので、基本はBeautifulSoupでスクレイピングして、JSで作られた動的なページだけPhantomJSCloudに任せればOK。

###おまけ
Google Cloud Functions × Seleniumに関して5時間くらい調べても動かすことができなかったのですが、PhantomJSCloudという方法に気づいてからは一瞬でした。

同じ悩みを抱えている人はPhantomJSCloud使いましょう。

0
4
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
0
4