18
21

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 5 years have passed since last update.

【Python】Chrome headlessで動的サイトのスクレイピング on AWS Lambda

Posted at

はじめに

ほとんど上記サイトのコピペ記事ですが、最低限動くものをまとめておきたかったので。。ほぼ作業ログです。

背景

  • 単なるスクレイピングをする場合、javascript で描画される html の取得ができない。要するに動的なサイトのスクレイピングができない。
  • そこで、headless なブラウザを動かすことにより、動的なサイトでもスクレイピングできるようにする。
  • Phantomjs を使うものをよくみかけるが、開発がストップし、selenium も deplicated と警告を出しているので、今回は Chrome headless を使う。

手順

python インストール

詳細は省略。2.x でも 3.x でもいけると思います。

フォルダ準備

$ mkdir headless_scraping
$ cd headless_scraping

selenium のインストール

作成したフォルダに、selenium をインストールします。
mac や windows で実行すると、その OS 向けの selenium がダウンロードされるようなので、Cloud9 で以下のコマンドを実行してください。(AWS Linux 向けの selenium が欲しい)

$ pip install selenium -t .

あとは、作成されるフォルダごとダウンロードしましょう。

  • selenium
  • selenium-3.13.0.dist-info
download.png

serverless-chromiumのダウンロード

bin ディレクトリを作ってそこにダウンロードします。

最新版はPythonで動かない(2018年4月27日現在 [参照])ため、v.0.0-37を入れます。

引用: https://qiita.com/nabehide/items/754eb7b7e9fff9a1047d

$ mkdir -p bin/
$ curl -SL https://github.com/adieuadieu/serverless-chrome/releases/download/v1.0.0-37/stable-headless-chromium-amazonlinux-2017-03.zip > headless-chromium.zip
$ unzip headless-chromium.zip -d bin/
$ rm headless-chromium.zip

Chrome driver のダウンロード

$ curl -SL https://chromedriver.storage.googleapis.com/2.37/chromedriver_linux64.zip > chromedriver.zip
$ unzip chromedriver.zip -d bin/
$ rm chromedriver.zip

lambda_function.py 作成

from selenium import webdriver
 
def lambda_handler(event, contxt):
    options = webdriver.ChromeOptions()
    options.binary_location = "./bin/headless-chromium"
    options.add_argument("--headless")
    options.add_argument("--no-sandbox")
    options.add_argument("--single-process")
 
    driver = webdriver.Chrome(
        executable_path="./bin/chromedriver",
        chrome_options=options
    )
 
    driver.get("https://www.google.co.jp")

    return driver.title

zip化

上記全て完了すると、構成は以下のようになります。

headless_scraping
│
├── bin
│   ├── chromedriver
│   └── headless-chromium
├── lambda_function.py
├── selenium
└── selenium-3.13.0.dist-info

headless_scraping ディレクトリで、Lambda にアップロードするファイルを zip化します。

$ zip -r upload.zip *

upload.zip というファイルができると思うので、あとはLambdaにアップロードします。

スクリーンショット 2018-07-11 10.54.43.png

※ 10MB は超えてますが、アップロードはできます。

あとはテスト走らせてグリーンになること確認できればおっけーです。お疲れ様でした!

18
21
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
18
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?