2017-12-28 41 views
1

AWSラムダを使用してウェブサイトをスクラップします。 クローラコードはPythonで、Pipによって提供されるScrapyライブラリを使用しています。AWSラムダ - 治療ライブラリが機能していません(名前証明書をインポートできません)。

公共アマゾンのLinux AMIバージョンで、私は依存関係のzipファイルを作成する必要がありましたラムダ関数(ここでの唯一のscrapy)を実行するには - ラムダを追加し、their documentation hereあたりとして、AMZN-AMI-HVM-2017.03.1.20170812-x86_64版-GP2ラムダ関数を作成するためにアップロードします。

さて、私はラムダ関数を呼び出すとき、それは私に次のエラーを与える:

cannot import name certificate_transparency: ImportError 
Traceback (most recent call last): 
    File "/var/task/my_lambda_function.py", line 120, in my_lambda_handler 
    return get_data_from_scrapy(username, password) 
    File "/var/task/my_lambda_function.py", line 104, in get_data_from_scrapy 
    process.crawl(MyScrapyFunction) 
    File "/var/task/scrapy/crawler.py", line 167, in crawl 
    crawler = self.create_crawler(crawler_or_spidercls) 
    File "/var/task/scrapy/crawler.py", line 195, in create_crawler 
    return self._create_crawler(crawler_or_spidercls) 
    File "/var/task/scrapy/crawler.py", line 200, in _create_crawler 
    return Crawler(spidercls, self.settings) 
    File "/var/task/scrapy/crawler.py", line 52, in __init__ 
    self.extensions = ExtensionManager.from_crawler(self) 
    File "/var/task/scrapy/middleware.py", line 58, in from_crawler 
    return cls.from_settings(crawler.settings, crawler) 
    File "/var/task/scrapy/middleware.py", line 34, in from_settings 
    mwcls = load_object(clspath) 
    File "/var/task/scrapy/utils/misc.py", line 44, in load_object 
    mod = import_module(module) 
    File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module 
    __import__(name) 
    File "/var/task/scrapy/extensions/memusage.py", line 16, in <module> 
    from scrapy.mail import MailSender 
    File "/var/task/scrapy/mail.py", line 22, in <module> 
    from twisted.internet import defer, reactor, ssl 
    File "/var/task/twisted/internet/ssl.py", line 59, in <module> 
    from OpenSSL import SSL 
    File "/var/task/OpenSSL/__init__.py", line 8, in <module> 
    from OpenSSL import crypto, SSL 
    File "/var/task/OpenSSL/crypto.py", line 12, in <module> 
    from cryptography import x509 
    File "/var/task/cryptography/x509/__init__.py", line 7, in <module> 
    from cryptography.x509 import certificate_transparency 
ImportError: cannot import name certificate_transparency 

後は、依存関係/ライブラリのバージョンです(すべてが最新です)私が使用していること:

  • を9.0.1
  • Scrapy == 1.4.0
  • pyOpenSSLピップ== 17.5.0
  • lxmlのを== 4.1.1
  • 暗号化== 2.1.4

助けていただければ幸いです。前もって感謝します。

答えて

4

このような複雑な作業にAWS Lambdaを使用しません。なぜあなたはそれを選んだのですか?無料であるため、いくつかのより良いオプションがあります。

  • AWSでは、新しいアカウントに対してすべてのサービスを1年間無料で利用できます。
  • AWS Lightsailは、最小プランの無料月を提供します。
  • PythonAnywhere.comに無料アカウントがあります。 PythonAnywhereでScrapyを試してみましたが、それは完全に動作します。 「継続的な」稼働時間は、無料アカウントの場合は最大2時間、有料アカウントの場合は最大6時間です(サポートに従って)。
  • ScrapingHub.com無料のクローラを1つ提供します。 "ScrapingHubにScrapy Spiderをデプロイする"のビデオをチェックしてください - ビデオはこのコース "Scrapy: Powerful Web Scraping & Crawling with Python"で無料プレビューに利用できます。

これが役立ちます。ご不明な点がございましたら、お知らせください。

+0

ウェブサイトをスクラップして、それを何らかのデータベースにダンプしたかっただけです。私はラムダを掻き取りに使うべきではないと私はあなたに同意し、私は今それを使用していません。しかし、Amazon Linux AMIでコンパイルされているすべての依存関係を満たしてもLambdaがうまくいかなかったのはなぜだろうか。 –

関連する問題