2
0

More than 3 years have passed since last update.

Lambdaでスクレイピングしようとしたら、requests, bs4がなくて苦労した

Last updated at Posted at 2021-02-05

AWS lambda でスクレイピングを使った簡単なアプリを作りたいと思い、以下のようなimport文を書いた。

import requests
import bs4
No module named 'requests'

lambdaのテストすると、上記のようなエラーメッセージが表示された。解決策としては、必要なライブラリを一つのフォルダに入れて圧縮し、それをlambdaのコンソール画面操作でアップロードするという方法。

  • 苦労した点
    • レイヤーに追加してもimportエラー(なぜ!)
    • アップロードするとlambda_function.pyが消える(!!)

レイヤー使えなかった

関数用意。

image.png

レイヤー用意。

image.png

だめじゃん!!!

image.png

手順

まずは以前pip3でローカルにインストールしたrequestsライブラリをアップロードした。

実行するが失敗。なんだこれ。chardetなんて初めて聞いた。

No module named 'chardet'

調べてみると確かにrequests/_init_.pyで使っていた。

import chardet

じゃあ次はchardetも一緒に圧縮して、、、これをあと何回繰り返せばいいんだ・・・
この時点で絶望した。
案の定また出た。次はcertifi。ってなんだこれ。

No module named 'certifi'

調べてみると証明書が信頼できるかどうか検証するために使っているらしい。
https://requests.readthedocs.io/en/master/user/advanced/

Requests verifies SSL certificates for HTTPS requests, just like a web browser. By default, SSL verification is enabled, and Requests will throw a SSLError if it’s unable to verify the certificate:

日本語訳
Requests は、Web ブラウザのように HTTPS リクエストの SSL 証明書を検証します。デフォルトでは SSL 検証が有効になっており、証明書を検証できなかった場合には SSLError がスローされます。

どうすれば漏れなくアップロードできるのだろうか。そこで次の記事を参考にした。
https://qiita.com/afukuma/items/b7191025700a7829967c

なるほど。これは思いつかなかった。pipでディレクトリ指定できるのか。

アップロードするとlambda_function.pyが消える

lambda_function.pyが存在する。

image.png

アップロード

image.png

lambda_function.pyが消えた!

image.png

ブラウザ上で直接編集していた場合、たまったもんじゃない。

参考記事

【Lambda】import requests が使えるようにする【python】
https://qiita.com/afukuma/items/b7191025700a7829967c

Requests: HTTP for Humans™ Advanced Usage
https://requests.readthedocs.io/en/master/user/advanced/

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