Pythonでスクレイピング するLambda関数を作る〜Python編〜

 
この記事を書いている人 - WRITER -
kmryk0526
詳しいプロフィールはこちら

Python3を使ってウェブページをスクレイピングするサンプルコードを作成し、それをAWS Lambdaで実行できるようにします。
今回の「Python編」ではサンプルコードを作成し、Lambdaにデプロイできるzipファイル(=デプロイパッケージ)を作成するところまでを実施します。

環境はこんな

uname -r
4.14.138-114.102.amzn2.x86_64
python -V
Python 3.7.4

※Pythonのバージョンアップ(2→3)についてはこちらを参照。

Lambdaにアップロードするzipファイルを作る

ソースをまとめるディレクトリsrcを作成して、そこに移動

mkdir src;cd $_

スクレイピングに必要なモジュールをインストールする
※後でzipにしてLambdaにアップロードしたいので、srcにインストールする

pip install requests -t .
pip install beautifulsoup4 -t .

不要ファイルを削除する。
Lambdaにアップロードするファイルのサイズを小さくしたいので、プログラムの実行に影響を及ぼさないメタ情報を持っているファイルは消しちゃいます。

rm -rf *.dist-info bin

こんなツリーになっていればOK
※treeがインストールされてなければ、yum install treeでインストールしておく

tree -L 1
.
|-- bs4
|-- certifi
|-- chardet
|-- idna
|-- requests
|-- scraping-sample.zip
|-- soupsieve
`-- urllib3

7 directories, 1 files

lambda_function.pyを実装する。

vi lambda_function.py
import requests,sys
from bs4 import BeautifulSoup

args = sys.argv

url = args[1]

html = requests.get(url)
soup = BeautifulSoup(html.text,'html.parser')
plainText = []

for i in soup.find_all(['title','p']):
    plainText.append(i.get_text(strip=True))
print(plainText)

引数に指定したURLをrequestsモジュールでHTMLに展開し、それをBeautifulSoupに渡してテキストにパースします。
また、ここではsoup.find_allを使って、titleタグおよびpタグの値のみを抽出して返します。

lambda_function.pyを実行してみる

こないだ書いたブログのURLを引数に指定して実行してみます。

python lambda_function.py https://tsurezure-tech.net/entry/aws/amazon-linux-2-python2to3
['Amazon Linux 2でpython3をデフォルトにする | つれづれテック', '', 'つれづれテック', 'つれづれテック', 'Amazon Linux 2のデフォルトのpythonはpython2となっています。これをpython3にしたくて、あれこれやったときのメモ。', 'OSはAmazon Linux 2', '現在のpython', '一応、yumをアップデートしとく。', '以下をインストール・bzip2-devel・gcc・gcc-c++・git・libffi-devel・openssl-devel・readline-devel・sqlite-devel・zlib-devel', '※”Failed to set locale, defaulting to C”が出ても無視でOK。', 'pyenvをインストールする', 'pyenvの起動には必要だが、git cloneしても作成されないディレクトリを手動で作成', '.pyenvのownerをec2-userにする', 'pyenvのパス設定など', '一応、確認', '編集した.bash_profileを読み込む', 'pyenvコマンドが認識されることを確認', 'python3.7.4をインストールする※ちょっと時間かかる。', 'pythonのバージョンを切り替える', 'おしまい。', '\フォローお願いします/', '(adsbygoogle = window.adsbygoogle || []).push({});', 'メールアドレスが公開されることはありません。*が付いている欄は必須項目です', 'コメント', '名前*', 'メールアドレス*', 'サイト', '', '', '', '', 'Copyright©つれづれテック,\r\n    2019    All Rights Reserved.']

ごちゃごちゃっとしてますが、とりあえず動作確認はとれました。

zipにする

zip -r scraping-sample.zip ./
ll *.zip
-rw-rw-r-- 1 ec2-user ec2-user 1154367 Oct 19 14:34 scraping-sample.zip

このzipファイルを次回、Lambdaに展開します。

Python編はここまで。
Lambda編に続く。

参考サイト
Samurai Blog/Pythonのbeautifulsoupでスクレイピングをしてみよう
AWS CLI Command Reference/update-function-code

この記事を書いている人 - WRITER -
kmryk0526
詳しいプロフィールはこちら
Ads by Google




Ads by Google








- Comments -

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

Copyright© つれづれテック , 2019 All Rights Reserved.