[Python] Scraping in AWS Lambda

Bereiten Sie eine Umgebung für das Scraping mit dem folgenden Stapel vor, um Websites mit Javascript zu unterstützen

Erforderliche Bibliothek Lokale Ausführung

pip install python-lambda-local

Bereitstellen

pip install lambda-uploader

Wenn Sie es schnell ausprobieren möchten, besuchen Sie bitte das folgende Repository https://github.com/akichim21/python_scraping_in_lambda

Ausführungsskript

Selen (Treiber: phantomjs) wird verwendet, um von js ausgeführtes HTML zu generieren und den Titel zu extrahieren. Schließlich ein Skript, das Phantomjs nur mit close () und quit () beendet.

lambda_function.py


#!/usr/bin/env python

import time # for sleep
import os   # for path
import signal
import selenium
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

def lambda_handler(event, context):
  # set user agent
  user_agent = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36")

  dcap = dict(DesiredCapabilities.PHANTOMJS)
  dcap["phantomjs.page.settings.userAgent"] = user_agent
  dcap["phantomjs.page.settings.javascriptEnabled"] = True

  browser = webdriver.PhantomJS(
              service_log_path=os.path.devnull,
              executable_path="./phantomjs",
              service_args=['--ignore-ssl-errors=true', '--load-images=no', '--ssl-protocol=any'],
              desired_capabilities=dcap
            )

  browser.get('http://google.com')
  title = browser.title
  browser.close()
  browser.quit()
  return title

Json ging auf das Argument über

Wird diesmal nicht verwendet, wird jedoch verwendet, wenn Argumente wie event ["key1"] übergeben werden.

event.json


{
  "key3": "value3",
  "key2": "value2",
  "key1": "value1"
}

Lambda-Einstellungen json

Rolle erstellen und ersetzen. Dieses Mal sind es nicht 50 MB oder mehr, daher werde ich s3 nicht verwenden. Wenn ich jedoch andere Bibliotheken verwende, werden es bald 50 MB oder mehr sein, sodass s3 erforderlich ist. Wenn Sie s3_bucket festlegen, wird die Datei über s3 hochgeladen.

Da der Name zur Laufzeit häufig verwendet wird, verwenden Sie in der Produktion einen geeigneten Namen. Stellen Sie Speicher, Zeitlimit usw. entsprechend dem Skript entsprechend ein.

lambda.json


{
  "name": "python_scraping_test",
  "description": "python_scraping_test",
  "region": "ap-northeast-1",
  "runtime": "python2.7",
  "handler": "lambda_function.lambda_handler",
  "role": "arn:aws:iam::00000000:role/lambda_basic_execution",
  "timeout": 60,
  "memory": 128,
  "variables": {
    "production": "True"
  },
  "ignore": [
    "\\.git.*",
    "/.*\\.pyc$",
    "/.*\\.zip$"
  ]
}

Abhängigkeiten

Setzen Sie nur Selen mit Pip ein. Speichern Sie Phantomjs als Binärdatei.

requirements.txt


selenium

Lokaler Ausführungsbefehl

Mit python-lambda-local ausführen f ist der Funktionsname und t ist das Zeitlimit (die Zeitüberschreitungen).

python-lambda-local -f lambda_handler -l ./ -t 60 lambda_function.py event.json

Ergebnis


[root - INFO - 2017-03-19 08:16:05,271] Event: {u'test': u'test'}
[root - INFO - 2017-03-19 08:16:05,271] START RequestId: 4e881a1b-3f7a-4de8-9afb-aee6f6b5dac6
[root - INFO - 2017-03-19 08:16:06,766] END RequestId: 4e881a1b-3f7a-4de8-9afb-aee6f6b5dac6
[root - INFO - 2017-03-19 08:16:06,766] RESULT:
Google
[root - INFO - 2017-03-19 08:16:06,766] REPORT RequestId: 4e881a1b-3f7a-4de8-9afb-aee6f6b5dac6  Duration: 1494.06 ms

Befehl implementieren

Da ~ / .aws / credentials verwendet werden, legen Sie es fest, wenn es nicht festgelegt ist

Installieren Sie, wenn aws-cli nicht vorhanden ist

pip install awscli
aws configure

Wenn sich virtuelle Umgebungen wie Conda an einem bestimmten Ort befinden, behalten Sie den Überblick. Ort

pip show virtualenv
lambda-uploader

##Wenn virtualenv ein spezieller Speicherort ist, nehmen Sie das Verzeichnis Location als Argument(Wenn vagrant, anaconda3, env py2 sind, sieht es so aus
lambda-uploader --virtualenv=/home/vagrant/.pyenv/versions/anaconda3-4.1.0/envs/py2/lib/python2.7/site-packages

Recommended Posts

[Python] Scraping in AWS Lambda
Schreiben Sie die AWS Lambda-Funktion in Python
Schaben mit Selen in Python
Schaben mit Chromedriver in Python
Scraping mit Selen in Python
Scraping mit Tor in Python
Web Scraping mit AWS Lambda
[Scraping] Python-Scraping
[Python] Memo zur erneuten Verarbeitung (Exponential Backoff) in AWS Lambda
Zusammenfassung bei Verwendung von AWS Lambda (Python)
Scraping mit Selen in Python (Basic)
Führen Sie Python planmäßig auf AWS Lambda aus
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Python in der Optimierung
CURL in Python
Python-Scraping-Memo
Python Scraping get_ranker_categories
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
Verwenden Sie print in Python2 lambda expression
Scraping mit Python
Metaanalyse in Python
Unittest in Python
Scraping mit Python
Abrufen temporärer AWS-Anmeldeinformationen in PHP, Python
Epoche in Python
Zwietracht in Python
Python Scraping eBay
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Best Practice für die Anmeldung im JSON-Format unter AWS Lambda / Python
Programmieren mit Python
Plink in Python
[Python / AWS Lambda-Ebenen] Ich möchte nur Module in AWS Lambda-Ebenen wiederverwenden
Konstante in Python
Python Scraping get_title
Scraping von Websites mit JavaScript in Python
FizzBuzz in Python
Ich habe Node.js und Python beim Erstellen eines Miniaturbilds mit AWS Lambda verglichen
SQLite in Python
Python: Scraping Teil 1
Schritt AIC in Python
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
LINE-Bot [0] in Python
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3