AI ScraperGuia

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.

O que você vai aprender
  • 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.

Um passo de scraper roda o programa publicado — sem IA na execução — e as linhas dela alimentam a próxima passo.

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.

YAMLcampaign.flow.yaml
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_product

Chame 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.

collect.py
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.rows

Comece agora, pegue depois

  • run espera 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 erro timeout é lançado.
  • run_async / runAsync devolve um id de execução na hora; status lê o estado sem bloquear; wait pega 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í downloadPath també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; rows vem 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.