Chame um scraper de um flow ou de um script
Um scraper publicado pode ser chamado, como um script. Coloque num flow como passo e ligue as entradas, ou chame pelo código com uma linha — scraper.run("shop_products", {"category": "2"}) — e receba as linhas de volta. Os dois sempre rodam a versão publicada, e a execução aparece embaixo de quem chamou na página de execuções.
- Adicionar um passo de scraper a um flow e ligar as entradas
- Chamar um scraper pelo código em todas as linguagens de script
- Ler o resultado: rows, count, doubts e notFound
- Tratar os erros e os tempos limite de um scraper
Um scraper como passo
Num flow, + → AI Scraper lista só scrapers publicados. A barra lateral do passo mostra as entradas declaradas do scraper como campos que você liga como os parâmetros de qualquer outro passo, um Tempo limite do passo, Abrir scraper e Testar. A saída dela são as linhas, prontas para um loop ou um passo SQL depois.
O que o passo devolve
A saída do passo é { rows, count, runId, downloadPath }: ligue output.rows a um loop, ou output.count a uma condição. Quando o resultado passa de 5 MB, ele é guardado fora da execução, rows vem vazio e downloadPath diz onde buscar. Um Tempo limite do passo limita só o passo: passado o tempo, a execução do scraper é cancelada e o passo falha com timeout, que um passo Em caso de erro pode capturar.
No arquivo do flow, o passo referencia o scraper pelo id; o nome é só uma dica legível.
collect:
kind: aiScraper
label: Collect products
scraper: 0f1c2d3e-4a5b-6c7d-8e9f-0a1b2c3d4e5f
scraperName: shop_products
timeoutMs: 120000
inputs:
category: { from: start, path: output.category }
next: each_productChame pelo código
O caminho é o caminho de pastas do scraper com os nomes exatos ("pasta/sub/nome") ou o id dele. As entradas são conferidas contra o que a versão publicada declara — texto, número ou data.
from waiso import scraper
def main(category: str = "2"):
res = scraper.run("shop_products", {"category": category}, timeout=120)
if res.not_found:
return []
print(f"{res.count} rows, doubts: {res.doubts}")
return res.rowsComece agora, pegue depois
runespera as linhas. Ele nunca dura mais que o script que chamou: passado o tempo limite (ou o tempo que resta ao script), a execução do scraper é cancelada e um errotimeouté lançado.run_async/runAsyncdevolve um id de execução na hora;statuslê o estado sem bloquear;waitpega as linhas, respeitando só o próprio tempo limite e nunca cancelando a execução.
O resultado e os erros
rows— todas as linhas, mesmo quando um resultado grande foi guardado fora da execução (aídownloadPathtambém vem preenchido);count— quantas.doubts— campos ou passos de que a construção não teve certeza,[]quando está tudo certo. Confira antes de confiar nas linhas.notFound— a entrada não achou nada;rowsvem vazio e isso é uma resposta, não uma falha.
Os erros têm um código estável: scraper_not_found, scraper_not_published, scraper_failed, credit_exhausted e timeout, mais o id da execução quando ela existe. Num flow, publicar e executar recusam um passo que aponta para um scraper que sumiu ou não está publicado.