Exemplo: colete e guarde
Dado coletado só é útil se for guardado. Este script é a cola entre três recursos: chama um scraper publicado, grava as linhas no bucket do projeto com a data de hoje e compara a quantidade de linhas com a que guardou da última vez. Coloque num agendamento diário e você tem um histórico do site.
- Chamar um scraper e tratar o Nada encontrado
- Enviar linhas para o S3 e guardar um valor entre execuções
Três chamadas do SDK
scraper.run devolve as linhas da versão publicada. s3.upload recebe texto — aqui o JSON das linhas — e grava na conexão S3 do projeto, devolvendo o caminho. state guarda valores pequenos de uma execução para a outra: este script guarda quantas linhas a última execução viu.
O código
import json
from datetime import date
from waiso import scraper, s3, state
def main(category: str = "2"):
res = scraper.run("shop_products", {"category": category}, timeout=300)
if res.not_found:
return {"stored": None, "rows": 0, "change": 0}
obj = s3.upload(json.dumps(res.rows), name=f"{date.today()}.json",
folder=f"products/{category}")
before = state.get(f"count:{category}", 0)
state.set(f"count:{category}", res.count)
return {"stored": obj.s3.path, "rows": res.count,
"change": res.count - before, "doubts": res.doubts}A organização dos arquivos faz a contabilidade. Cada categoria tem a própria pasta e cada arquivo leva a data no nome; todo envio também ganha um prefixo curto e único, então duas execuções no mesmo dia deixam dois arquivos e nada é sobrescrito. O caminho devolvido é a chave exata, por isso o script o devolve. A chave do estado também leva a categoria, então rodar o script para várias categorias nunca mistura as contagens.
- Publique o scraper primeiro: o script sempre roda a versão publicada.
- Rode o script duas vezes. Na segunda,
changeé 0, a menos que o site tenha mudado.
Transforme em rotina
Publique o script e adicione um agendamento diário na aba Gatilhos dele. Repasse as doubts: quando a lista não vem vazia, um alerta ou uma condição num flow pode pedir que uma pessoa olhe antes de confiar nos dados.