Background
J'ai utilisé venv
pour enregistrer le package que j'ai envoyé dans Python3.6 ou version ultérieure, mais lorsque je cherchais à savoir si cela pouvait être fait sur AWS, il y avait une fonction abordable appelée layer, alors j'ai essayé de l'utiliser.
venv
C'est OK sur le PC de travail
python -m venv [Nom de l'environnement virtuel]
./[Nom de l'environnement virtuel]/bin/activate
([Nom de l'environnement virtuel]) pip install [nom du paquet]
[Web scraping avec AWS lambda-Development (Web scraping)](https://qiita.com/satsukiya/items/b9d02abd7fa96cd59355#development-web%E3%82%B9%E3%82%AF%E3% Créez un fichier zip à télécharger sur AWS de la même manière que 83% AC% E3% 82% A4% E3% 83% 94% E3% 83% B3% E3% 82% B0).
mkdir packages
cd packages
pip install [paquet] -t ./
pip install [paquet] -t ./
......
zip -r ./myDeploymentPackage.zip ./packages
Layer Pour créer un environnement pip, créez une couche.
Development (error)
Ici [Web scraping avec AWS lambda-Development (Web scraping)](https://qiita.com/satsukiya/items/b9d02abd7fa96cd59355#development-web%E3%82%B9%E3%82%AF% Écrivons un code en utilisant une belle soupe avec E3% 83% AC% E3% 82% A4% E3% 83% 94% E3% 83% B3% E3% 82% B0).
import json
import requests
from bs4 import BeautifulSoup
def lambda_handler(event, context):
# TODO implement
response = requests.get('https://mainichi.jp/editorial/')
soup = BeautifulSoup(response.text)
pages = soup.find("ul", class_="list-typeD")
articles = pages.find_all("article")
links = [ "https:" + a.a.get("href") for a in articles]
return {
'statusCode': 200,
'links' : links
}
ensuite
{
"errorMessage": "Unable to import module 'lambda_function'"
}
J'obtiens une erreur d'importation.
[Précautions de base lors de l'utilisation de couches Lambda @ Python (pour ceux qui ne peuvent pas importer de fichiers téléchargés vers des couches) -Notes](https://qiita.com/k_hoso/items/78beb33e53abfdddabe7#%E6% B3% A8% E6% 84% 8F% E7% 82% B9)
En regardant, il semble que le fichier zip soit décompressé sous / opt /
.
Dans ce cas, il y a un package installé par pip sur le PC de travail dans / opt / packages /
, donc
import sys
sys.path.append('/opt/packages')
Il faut passer le chemin à l'avance.
Development (modified)
import sys
sys.path.append('/opt/packages')
import json
import requests
from bs4 import BeautifulSoup
def lambda_handler(event, context):
# TODO implement
response = requests.get('https://mainichi.jp/editorial/')
soup = BeautifulSoup(response.text)
pages = soup.find("ul", class_="list-typeD")
articles = pages.find_all("article")
links = [ "https:" + a.a.get("href") for a in articles]
return {
'statusCode': 200,
'links' : links
}
{
"statusCode": 200,
"links": [
"https://mainichi.jp/articles/20201120/ddm/005/070/067000c",
"https://mainichi.jp/articles/20201120/ddm/005/070/065000c",
"https://mainichi.jp/articles/20201119/ddm/005/070/119000c",
"https://mainichi.jp/articles/20201119/ddm/005/070/118000c",
"https://mainichi.jp/articles/20201118/ddm/005/070/115000c",
"https://mainichi.jp/articles/20201118/ddm/005/070/114000c",
"https://mainichi.jp/articles/20201117/ddm/005/070/114000c",
"https://mainichi.jp/articles/20201117/ddm/005/070/113000c",
"https://mainichi.jp/articles/20201116/ddm/005/070/043000c"
]
}
Post Scripting J'aimerais pouvoir le faire sans "/ packages /" lors de la compression avec zip: expressionless:
Recommended Posts