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
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
Wird diesmal nicht verwendet, wird jedoch verwendet, wenn Argumente wie event ["key1"] übergeben werden.
event.json
{
"key3": "value3",
"key2": "value2",
"key1": "value1"
}
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$"
]
}
Setzen Sie nur Selen mit Pip ein. Speichern Sie Phantomjs als Binärdatei.
requirements.txt
selenium
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
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