7 pontos por GN⁺ 2024-09-03 | 1 comentários | Compartilhar no WhatsApp
  • Um texto que resume a experiência de desenvolver um scraper web com suporte de IA usando o novo recurso de saídas estruturadas da OpenAI

Pedindo ao GPT-4o para fazer scraping de dados

  • O primeiro experimento foi pedir ao GPT-4o para extrair dados de uma string HTML
  • Foi configurada uma saída estruturada usando modelos Pydantic
    from typing import List, Dict  
    class ParsedColumn(BaseModel):  
        name: str  
        values: List[str]  
    
    class ParsedTable(BaseModel):  
        name: str  
        columns: List[ParsedColumn]  
    
  • O prompt de sistema era o seguinte:

    Você é um especialista em web scraping. Deve receber o conteúdo de uma tabela HTML e extrair dados estruturados

Fazendo parsing de tabelas complexas

  • Depois de testar tabelas simples, foram testadas tabelas complexas como a previsão do tempo de 10 dias do Weather.com
  • O GPT-4o fez o parsing dos dados corretamente ao adicionar a coluna Day/Night
  • A coluna Condition não aparecia no site e pareceu uma alucinação, mas ao inspecionar o código-fonte, viu-se que era uma tag realmente existente

Linhas mescladas quebram o modelo

  • Foi testada uma tabela simples da Wikipedia (Human Development Index), mas o modelo falhou por causa de linhas mescladas
  • O prompt de sistema foi ajustado, mas isso não teve efeito

Pedindo ao GPT-4o para retornar XPath

  • Para reduzir o custo das chamadas à API da OpenAI, foi pedido que retornasse XPath em vez de dados já parseados
  • Porém, muitas vezes o modelo retornava XPath incorretos ou não retornava os dados

Combinando as duas abordagens

  • Foi tentada uma abordagem em que, após extrair os dados, pedia-se o XPath com base neles
  • Esse método trouxe resultados melhores, mas surgiu o problema de imagens sendo convertidas em texto

GPT-4o é muito caro

  • Fazer scraping com GPT-4o sai caro
  • Foi adicionada uma lógica de limpeza para remover dados desnecessários da string HTML e reduzir o custo

Conclusão e demo

  • A qualidade da extração de dados do GPT-4o impressionou, mas o custo decepcionou
  • Foi disponibilizada uma demo simples usando Streamlit
  • Ainda há muito espaço para melhorias com mais experimentos

Resumo do GN⁺

  • Este texto explora as possibilidades e os limites do web scraping com IA
  • Mostra que é possível extrair com precisão dados de tabelas complexas usando o recurso de saídas estruturadas do GPT-4o
  • Embora existam problemas de custo e algumas limitações técnicas, fica claro o potencial de ferramentas de web scraping com suporte de IA
  • Outros projetos com funcionalidades parecidas incluem BeautifulSoup e Scrapy

1 comentários

 
GN⁺ 2024-09-03
Comentários do Hacker News
  • Foi bem-sucedido converter HTML para um formato simples, como markdown, e depois enviar isso para o LLM

    • Experimentou Extractus e dom-to-semantic-markdown
    • Internamente, usa Apify e Firecrawl para executar Magic Loops na nuvem
    • Na extensão do Chrome, usa dom-to-semantic-markdown
    • Está explorando como extrair elementos específicos por meio de um fluxo de suporte ao usuário
    • Ao simplificar o problema, também obteve sucesso com o GPT-4o mini
  • Para conteúdo estruturado, como listas de itens e tabelas simples, não é necessário usar LLM

    • Criou a primeira versão do web scraper com IA, mas heurísticas baseadas em atributos e posição dos elementos foram mais rápidas, baratas e precisas
    • Em grande parte dos sites, a abordagem sem IA funciona muito bem
    • É preciso confirmar se IA é realmente necessária
  • Surpreende que o autor tenha concluído 99% do trabalho e não tenha baixado e testado o ollama para o 1% restante

    • Um modelo 7B ou 30B pode funcionar bem nesse caso
    • Não há necessidade de GPT-4o
  • Usa um método de tirar uma captura de tela da página, recortar a parte necessária e enviar ao GPT

    • Isso é útil quando é preciso fazer manualmente comparações de preços entre vários fornecedores
    • Pode sair caro, mas ainda é mais barato do que uma pessoa real e permite que ela faça um trabalho mais significativo
  • A OpenAI anunciou recentemente a Batch API

    • É possível preparar todos os prompts e executá-los em lote
    • O custo cai pela metade
    • É útil para aplicações que não exigem tempo real
  • Funcionou bem fornecer um exemplo de HTML e pedir um snippet de código em beautifulsoup

    • A estrutura que se quer raspar permanece igual
    • Usar LLM para o parsing em si é exagero e traz o risco de distorcer os resultados
  • Há curiosidade sobre a existência de um "html reducer"

    • 90% dos tokens do código-fonte da página são desnecessários
    • Se usar um parser de DOM para manter apenas nós com texto, isso provavelmente geraria uma economia considerável
    • Usa readability, mas em sites com muito JS a qualidade cai
  • Em vez de fazer scraping diretamente com GPT-4o, ele pode escrever um script simples de web scraping

    • Quando surgem problemas, usa um loop de prompts
    • É mais eficiente criar e executar um resolvedor de restrições
  • Na Kadoa, estão trabalhando em tarefas de scraping automatizado com IA

    • No início usavam GPT-3, mas desenvolveram uma solução com melhor custo-benefício
    • Usam codegen para gerar código de extração com seletores CSS ou XPath
    • Usam LLMs pequenos para limpar os dados e mapeá-los para o formato desejado
    • Usam LLM como juiz para avaliar a qualidade dos dados
    • Combinam métodos tradicionais de engenharia ETL com etapas usando LLMs pequenos
  • Está construindo um banco de dados de música clássica

    • Usa ChatGPT para extrair listas de eventos da Wikipédia
    • Usa chatgpt-mini para reduzir custos
    • Usa BeautifulSoup(html).text para diminuir a quantidade de tokens
    • Ao raspar 10.000 páginas, foi mais eficiente fornecer o HTML e fazer com que ele escrevesse código Python
    • O recurso from_html do Pandas é útil, mas nem todas as tabelas usam a tag <table>