{"id":28306888,"url":"https://github.com/ashu11-a/betscraper-api","last_synced_at":"2026-02-17T13:31:57.674Z","repository":{"id":288074743,"uuid":"879960542","full_name":"Ashu11-A/BetScraper-API","owner":"Ashu11-A","description":"A back-end system responsible for scraping betting websites and populating a database with the scraped data.","archived":false,"fork":false,"pushed_at":"2025-04-20T02:43:39.000Z","size":3124,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-20T04:38:41.342Z","etag":null,"topics":["bet","bull","fastify","idp","mysql","puppeteer","scraper","scraper-api","sharp","tesseract","tesseract-ocr","typeorm","typescript","zod","zod-validation"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ashu11-A.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-10-28T21:26:40.000Z","updated_at":"2025-05-01T00:09:39.000Z","dependencies_parsed_at":"2025-04-15T12:46:00.002Z","dependency_job_id":"37233f43-0299-45d8-84ab-d729ae820a15","html_url":"https://github.com/Ashu11-A/BetScraper-API","commit_stats":null,"previous_names":["ashu11-a/betscraper-api"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Ashu11-A/BetScraper-API","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashu11-A%2FBetScraper-API","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashu11-A%2FBetScraper-API/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashu11-A%2FBetScraper-API/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashu11-A%2FBetScraper-API/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ashu11-A","download_url":"https://codeload.github.com/Ashu11-A/BetScraper-API/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ashu11-A%2FBetScraper-API/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29545580,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T13:00:00.370Z","status":"ssl_error","status_checked_at":"2026-02-17T12:57:14.072Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bet","bull","fastify","idp","mysql","puppeteer","scraper","scraper-api","sharp","tesseract","tesseract-ocr","typeorm","typescript","zod","zod-validation"],"created_at":"2025-05-24T04:12:53.419Z","updated_at":"2026-02-17T13:31:57.664Z","avatar_url":"https://github.com/Ashu11-A.png","language":"TypeScript","readme":"\u003cdiv align=\"center\"\u003e\n\n# BetScraper\n\n![license-info](https://img.shields.io/github/license/Ashu11-A/AST-Shell?style=for-the-badge\u0026colorA=302D41\u0026colorB=f9e2af\u0026logoColor=f9e2af)\n![stars-infoa](https://img.shields.io/github/stars/Ashu11-A/BetScraper-API?colorA=302D41\u0026colorB=f9e2af\u0026style=for-the-badge)\n\n![Last-Comitt](https://img.shields.io/github/last-commit/Ashu11-A/BetScraper-API?style=for-the-badge\u0026colorA=302D41\u0026colorB=b4befe)\n![Comitts Year](https://img.shields.io/github/commit-activity/y/Ashu11-A/BetScraper-API?style=for-the-badge\u0026colorA=302D41\u0026colorB=f9e2af\u0026logoColor=f9e2af)\n![reposize-info](https://img.shields.io/github/languages/code-size/Ashu11-A/BetScraper-API?style=for-the-badge\u0026colorA=302D41\u0026colorB=90dceb)\n\n![SourceForge Languages](https://img.shields.io/github/languages/top/Ashu11-A/BetScraper-API?style=for-the-badge\u0026colorA=302D41\u0026colorB=90dceb)\n\n![output](https://github.com/user-attachments/assets/434c423b-3d12-42d1-aa53-262986e2583c)\n\n\u003c/div\u003e\n\u003cdiv align=\"left\"\u003e\n\n# Ferramenta para Monitoramento de Plataformas Digitais de Apostas\n\nEste repositório contém o código-fonte e a documentação de uma aplicação desenvolvida para o monitoramento periódico de plataformas digitais de apostas. A ferramenta foi projetada para verificar a conformidade dos sites de apostas com a legislação brasileira, especialmente no que diz respeito à exibição das cláusulas de advertência sobre restrição etária e riscos associados à atividade.\n\n## Sumário\n\n- [Introdução](#introdução)\n- [Objetivo](#objetivo)\n- [Fundamentação e Tecnologias Utilizadas](#fundamentação-e-tecnologias-utilizadas)\n  - [OCR – Reconhecimento Ótico de Caracteres](#ocr---reconhecimento-ótico-de-caracteres)\n  - [Web Scraping](#web-scraping)\n  - [Filas de Processamento (Queues)](#filas-de-processamento-queues)\n  - [Cron Job](#cron-job)\n- [Metodologia](#metodologia)\n- [Desenvolvimento do Software](#desenvolvimento-do-software)\n  - [Visão Geral da Arquitetura](#visão-geral-da-arquitetura)\n  - [Tecnologias e Ferramentas](#tecnologias-e-ferramentas)\n  - [Fluxo de Processamento da Aplicação](#fluxo-de-processamento-da-aplicação)\n- [Dependências e Solução de Problemas](#dependências-e-solução-de-problemas)\n- [Limitações e Desafios](#limitações-e-desafios)\n- [Considerações Finais e Aprimoramentos Futuros](#considerações-finais-e-aprimoramentos-futuros)\n- [Referências](#referências)\n- [Licença](#licença)\n\n---\n\n## Introdução\n\nA popularização das apostas de quota fixa, tanto no Brasil quanto em nível internacional, tem impulsionado a necessidade de regulamentação e fiscalização mais rigorosas dos sítios eletrônicos dos operadores. Em especial, verifica-se a importância da presença de cláusulas de advertência relativas à restrição etária e aos riscos financeiros inerentes à atividade. Com o intuito de facilitar a verificação do cumprimento dessas normas, o projeto propõe o desenvolvimento de um software capaz de identificar, de forma automática e padronizada, se estas cláusulas estão presentes e visíveis nas páginas iniciais dos sites de apostas.\n\n## Objetivo\n\nO principal objetivo desta ferramenta é assegurar que os sites de apostas cumpram as exigências legais quanto à exibição das cláusulas de advertência:\n- **Restrição Etária**: Verificar a presença de expressões como “18+” e “proibido para menores de 18 anos”.\n- **Avisos de Risco**: Identificar declarações padronizadas de alerta, tais como “jogue com responsabilidade”, “apostas não são investimento”, entre outros, conforme definido nas normas e na regulamentação publicitária.\n\nDessa forma, o software possibilita que os órgãos reguladores e consumidores possam facilmente confirmar que as informações necessárias estão disponíveis e apresentadas de forma clara e acessível.\n\n## Fundamentação e Tecnologias Utilizadas\n\nA implementação da ferramenta baseia-se em diversas técnicas e tecnologias modernas. A seguir, destacam-se os principais fundamentos:\n\n### OCR – Reconhecimento Ótico de Caracteres\n\n- **Descrição**: Tecnologia que permite converter imagens em dados textuais processáveis por sistemas computacionais.\n- **Aplicação**: Utilizado para extrair textos de elementos visuais (por exemplo, banners e imagens) presentes nos sites de apostas.\n- **Ferramenta Utilizada**: PaddleOCR, que se destaca por sua robustez e capacidade de lidar com textos complexos e múltiplos idiomas.\n\n### Web Scraping\n\n- **Descrição**: Técnica automatizada para extração de dados de páginas web.\n- **Aplicação**: A ferramenta utiliza web scraping para capturar o HTML e imagens das páginas iniciais dos sítios de apostas, utilizando a biblioteca Puppeteer baseada em Node.js.\n- **Desafios**: Lida com mudanças constantes de layout, medidas anti-scraping (como CAPTCHAs e bloqueios de IP) e atualizações frequentes dos conteúdos.\n\n### Filas de Processamento (Queues)\n\n- **Descrição**: Utilização de filas no modelo FIFO (First In, First Out) para gerenciar e processar as tarefas de scraping de forma ordenada.\n- **Aplicação**: Garante que as requisições de monitoramento sejam executadas de forma sequencial e eficiente, evitando sobrecarga do sistema.\n\n### Cron Job\n\n- **Descrição**: Tarefas agendadas que permitem a execução periódica dos processos de scraping e análise.\n- **Aplicação**: Utilizado para agendar a coleta de dados dos sítios de apostas em intervalos regulares (ex.: a cada 6 ou 12 horas), garantindo monitoramento contínuo e atualização dos dados.\n\n## Metodologia\n\nA abordagem metodológica adotada para o desenvolvimento da ferramenta incluiu os seguintes passos:\n\n1. **Coleta de Dados**: Identificação dos sítios eletrônicos autorizados, utilizando listas oficiais e consolidação dos domínios.\n2. **Levantamento de Requisitos**: Definição clara das expressões-chave de restrição etária e avisos de risco, de forma que correspondam estritamente às disposições legais.\n3. **Modelagem do Sistema**: Criação de um fluxograma e definição do fluxo de processamento desde o carregamento das páginas até o salvamento dos resultados.\n4. **Desenvolvimento Iterativo**: Abordagem iterativa permitindo ajustes progressivos conforme os testes identificavam pontos de melhoria.\n5. **Validação dos Dados**: Processamento e normalização dos textos extraídos, com análise de similaridade para compensar eventuais inconsistências causadas por imagens ou formatações diferenciadas.\n\n## Desenvolvimento do Software\n\n### Visão Geral da Arquitetura\n\nO sistema foi concebido com uma arquitetura modular e escalável, composta por:\n\n- **API baseada em Fastify**: Responsável por gerenciar as requisições e fornecer um painel de controle para a execução manual ou agendada dos processos.\n- **Banco de Dados MySQL**: Utilizado para persistência dos dados, com acesso facilitado pelo ORM TypeORM.\n- **Gerenciamento de Filas com Redis e Bull**: Controla o processamento assíncrono das tarefas de scraping e análise.\n- **Serviço de OCR**: Implementado em Python utilizando Flask para comunicação entre os componentes, garantindo a extração precisa dos textos das imagens.\n\n### Tecnologias e Ferramentas\n\n- **Linguagem Principal**: TypeScript\n- **Runtime**: Bun – devido à sua alta performance e inicialização rápida.\n- **Biblioteca de Web Scraping**: Puppeteer\n- **OCR**: PaddleOCR\n- **Agendamento de Tarefas**: Cron Jobs configurados diretamente na aplicação e armazenados no banco de dados.\n- **Exportação de Dados**: Biblioteca ExcelJS para geração de relatórios em formato XLSX.\n- **Estrutura HTTP**: Fastify, com rotas inspiradas em Next.js para otimizar a modularidade e a organização das funcionalidades.\n\n### Fluxo de Processamento da Aplicação\n\nO fluxo lógico do sistema é composto por diversas etapas:\n\n1. **Carregamento da Página (LoadPage)**: A aplicação aguarda o carregamento total dos elementos da página para garantir que todos os dados estejam disponíveis para análise.\n2. **Mapeamento (Scanner)**: Varredura completa do DOM para identificar todos os elementos que possam conter as informações de interesse.\n3. **Processamento OCR**: Análise das imagens capturadas para extração de textos, seguida de normalização (remoção de espaços, conversão para minúsculas, remoção de acentos) para facilitar a comparação com as expressões-chave.\n4. **Análise do HTML**: Verificação detalhada dos textos presentes no código fonte, considerando propriedades como cor, contraste, posição e visibilidade.\n5. **Armazenamento dos Dados (Save)**: Persistência dos dados processados no banco de dados para futuras consultas e geração de relatórios.\n\n## Dependências e Solução de Problemas\n\nPara a execução correta do projeto, certifique-se de instalar todas as dependências necessárias e de configurar seu ambiente conforme os requisitos listados abaixo.\n\n### WSL2 (Windows Subsystem for Linux 2)\nSe você estiver utilizando o WSL2, siga as instruções:\n```sh\n# Windows WSL2: https://www.tensorflow.org/install/pip?hl=pt-br#windows-wsl2_1\n# Instalação do CUDA: https://developer.nvidia.com/cuda-downloads\n\nsudo apt install nvidia-cuda-toolkit\n```\n\n### API Typescript\nPara preparar o ambiente da API escrita em TypeScript, utilize os seguintes comandos:\n```sh\nsudo apt update \u0026\u0026 sudo apt install -y ca-certificates fonts-liberation libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 lsb-release wget xdg-utils\n```\n\n### API Python\nPara configurar o ambiente Python da API, siga os passos abaixo:\n```sh\napt install python3.10 python3.10-venv\n\npython3 -m venv .venv\nsource .venv/bin/activate\n\npip install -r requirements.txt\n\n# Para WSL2, pode ser necessário:\n# export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH\n# source ~/anaconda3/etc/profile.d/conda.sh\npython3 api.py\n```\n\n### Salvando as Bibliotecas Atuais\nPara gerar um arquivo com as versões das bibliotecas instaladas:\n```sh\npip freeze \u003e requirements.txt\n```\n\n### Correção de Erros Comuns\n\n#### Erro: [job.id is null]\nEm caso de erro relacionado a `job.id is null`, consulte:\n```sh\n# https://stackoverflow.com/questions/33115325/how-to-set-redis-max-memory\n```\n\n#### Erro: Unable to connect. Is the computer able to access the url\nCaso ocorra erro de conexão, verifique:\n```sh\n# https://github.com/oven-sh/bun/issues/1425\n```\n\n## Limitações e Desafios\n\nDurante o desenvolvimento, foram identificadas algumas limitações que podem afetar o desempenho e a eficiência da ferramenta:\n\n- **Variação de Formatos e Layouts**: Diversas formas de apresentação das cláusulas podem dificultar o reconhecimento preciso, especialmente quando as informações estão fragmentadas em múltiplas tags ou compostas por imagens de baixa resolução.\n- **Medidas Anti-Scraping**: Sítios que utilizam CAPTCHAs, bloqueios de IP e outras técnicas para evitar scraping podem exigir estratégias adicionais, como o uso de proxies ou atrasos entre requisições.\n- **Limitações do OCR**: Dificuldades em interpretar textos em imagens com baixa qualidade ou fontes atípicas podem comprometer a precisão da extração dos textos.\n- **Interação do Usuário**: Conteúdos que dependem de ações como cliques em botões (\"Mostrar mais\") não são processados automaticamente, limitando a abrangência da análise.\n\n## Considerações Finais e Aprimoramentos Futuros\n\nO desenvolvimento desta ferramenta representa um avanço significativo no monitoramento das plataformas digitais de apostas, contribuindo para a conformidade com as normas e para a promoção de práticas de jogo responsável. Entre os principais pontos destacados, estão:\n\n- A integração de tecnologias modernas (Fastify, Puppeteer, PaddleOCR, Redis e Bull) que proporcionam uma solução robusta e escalável.\n- A abordagem iterativa que permitiu ajustes e melhorias contínuas ao longo do desenvolvimento.\n\n### Aprimoramentos Futuros\n\n- **Interface de Usuário Intuitiva**: Desenvolvimento de um dashboard que facilite o monitoramento e a interação com a ferramenta.\n- **Otimização do OCR**: Ajustes para melhorar a precisão na extração textual, sobretudo em imagens de baixa qualidade ou com formatações desafiadoras.\n- **Reconhecimento Personalizado de Elementos Gráficos**: Criação de modelos dedicados para identificar de forma mais precisa os elementos gráficos que contenham as cláusulas obrigatórias.\n- **Execução Distribuída**: Implementação de execução paralela em múltiplas máquinas para aumentar a escalabilidade e eficiência do monitoramento.\n\n## Referências\n\n- **Patel, C., Patel, A., \u0026 Patel, D. (2012)**. *Optical character recognition by open source OCR tool tesseract: A case study*. [Link para o PDF](https://www.academia.edu/download/100190454/3e47cc647c47a1a249e1103047dd5b002b5a.pdf)\n- **Khder, M. A. (2021)**. *Web scraping or web crawling: State of art, techniques, approaches and application*. [Link para o PDF](http://www.i-csrs.org/Volumes/ijasca/2021.3.11.pdf)\n- **Keller, M. S. (1999)**. *Take command: cron: Job scheduler*. [Link para a publicação](https://dl.acm.org/doi/fullHtml/10.5555/327966.327981)\n- **Indra, J., \u0026 Sarjono, H. (2010)**. *Queue Analysis System For Improving Efficiency Of Service*. [Link para o PDF](https://pdfs.semanticscholar.org/55ce/cc3fe41aa3c2c2d152c4cfe799115adc6b0a.pdf)\n- **CONAR – Anexo X Publicidade de Apostas**. [Link para o documento](http://www.conar.org.br/pdf/CONAR-ANEXO-X-PUBLICIDADE-APOSTAS-dezembro-2023.pdf)\n\n---\n\n## Licença\n\nEste projeto está licenciado sob a [MIT License](LICENSE).\n\n---\n\n*Desenvolvido pelo Instituto Brasileiro de Ensino, Desenvolvimento e Pesquisa (IDP) – Campus Asa Norte em 2024.*\n\n\u003c/div\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashu11-a%2Fbetscraper-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fashu11-a%2Fbetscraper-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fashu11-a%2Fbetscraper-api/lists"}