pymandua


Namepymandua JSON
Version 0.1.1 PyPI version JSON
download
home_pagehttps://github.com/seuusuario/web-scraper-with-ai
SummaryUma biblioteca para scraping com lógica fuzzy e conversão de HTML e conteúdos ao seu redor, lidando com reatividade do javascript para Markdown focado em LLMs. Adicionado com um pipeline RAG.
upload_time2025-10-06 23:51:58
maintainerNone
docs_urlNone
authorMarcos Henrique Maimoni Campanella
requires_python>=3.8
licenseMIT
keywords scraping fuzzy logic html to markdown javascript reactivity llm web scraping rag retrieval-augmented generation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
  <img src="midia/Pymandua.png" alt="Pymandua Logo">
</p>

# Pymandua: Web Scraper para todos os websites 
## Conversão de HTML para Markdown para pré-processamento de LLMs

Este projeto é uma biblioteca Python que realiza Web Scraping inteligente com lógica fuzzy e converte páginas HTML e conteúdos relacionados (como subpáginas e conteúdos renderizados com JS) em um Markdown simplificado, ideal para Large Language Models (LLMs) e análises posteriores.

---

## 🚀 Funcionalidades

- Web scraping automatizado com Selenium e suporte a páginas dinâmicas
- Conversão precisa de HTML para Markdown limpo com suporte a:
  - Títulos, parágrafos, listas, links, tabelas, blocos de código, entre outros
- Lógica de busca fuzzy para identificar se o conteúdo da página e páginas ao seu redor está relacionado às palavras-chave desejadas
- Mecanismo de retorno automático de páginas visitadas
- Pode ser utilizado como biblioteca ou como script principal

---

## 🧠 Como Funciona

### 🔍 Web Scraping com Selenium

O módulo utiliza o `undetected-chromedriver` e `selenium-stealth` com o ``selenium`` para navegar por páginas web, extrair conteúdos e retroceder após a coleta. O conteúdo das páginas é tratado pelo `BeautifulSoup` e convertido em Markdown por um parser customizado.

### 🧪 Lógica Fuzzy

A comparação entre o conteúdo da página e as palavras-chave fornecidas é feita com `RapidFuzz`, utilizando similaridade textual (ex: token_sort_ratio). Isso permite validar se a página realmente trata do tema buscado, mesmo que o texto não seja exatamente igual, ou se existe alguns conteúdos ao seu redor (subpáginas e conteúdos criados a partir de reatividade com JavaScript) para capturar e consolidar em um único lugar.

---

## 🖼️ Fluxo do Processo


<p align="center">
  <img src="midia/flowchart.png" alt="Fluxograma do Processo" style="background: white; padding: 8px; border-radius: 8px;">
</p>


### 🧪 Instalação

**Com pip**
```bash
pip install pymandua
```


**Ou alternativamente**
1. **Clone o repositório:**
```bash
git clone https://github.com/Mark-Campanella/pymandua.git
cd pymandua
```

2. **Crie um ambiente virtual e ative:**
```bash
python -m venv env
source env/bin/activate  # Linux/macOS
env\Scripts\activate     # Windows
```

3. **Instale as dependências:**
``` bash
pip install -r requirements.txt
```


### 🔧 Uso como script
```python
from pymandua import to_mkd

result = to_mkd(
    urls="https://pt.wikipedia.org/wiki/Luís_XIV_de_França",
    keywords=["Luís XIV", "França", "Rei Sol"],
    output_path=r"projeto/output",
    wait=2,
    threshold=90
)
print(result)

```

**Uso como CLI**
```bash
to-mkd --urls "https://exemplo.com" --keywords "palavra1,palavra2" --output "saida.md" --wait 2 --threshold 95
```

### 🧩 Estrutura do Projeto
```
├── pymandua/              # Módulo principal
│   ├── interface.py       # Interface principal do conversor
│   ├── converter.py       # Conversor de HTML para Markdown
│   ├── gatherer.py        # Web scraper e parser de conteúdo
│   ├── driver.py          # Inicializador de driver para o selenium
│   ├── crawler.py         # Web crawler e parser de conteúdo
│   ├── treater.py         # Prepara para o cleaner
│   ├── aggregator.py      # Agrega os diversos HTMLs resultantes em um para ser convertido
│   ├── cleaner.py         # Parser e limpador de conteúdo não necessário
├── output/                # Arquivos .mkd gerados
├── requirements.txt       # Dependências
├── main.py                # Exemplo de uso
```

**📚 Referências**
- [Selenium Docs](https://selenium-python.readthedocs.io)
- [BeautifulSoup Docs](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)
- [RapidFuzz Docs](maxbachmann.github.io/RapidFuzz/)
- [RapidFuzz Examples](https://github.com/rapidfuzz/RapidFuzz#examples)

----------

### 🧠 RAG Pipeline (Análise com IA)
Este projeto estende sua funcionalidade principal com um pipeline de Análise de Conteúdo usando `Retrieval-Augmented Generation (RAG)`. Ele permite que você use os arquivos Markdown gerados para consultas inteligentes, respondendo perguntas e gerando tabelas estruturadas sobre o conteúdo.

### 🚀 Funcionalidades Chave do RAG
- Modularidade "Plug & Play": Alterne facilmente entre diferentes provedores de LLM (``Ollama, OpenAI, Gemini``) e bancos de dados vetoriais (``ChromaDB, Pinecone``) com a simples alteração de um parâmetro.

- Interface Web (UI): Uma interface interativa e amigável, criada com ``Gradio``, que se abre automaticamente no navegador para uma experiência de uso otimizada.

- Geração de Tabelas: Peça ao LLM para extrair dados específicos e formatá-los em uma tabela Markdown com cabeçalhos personalizados, ideal para análise.

### 🔧 Uso do Pipeline RAG
O pipeline RAG é um processo separado da conversão de HTML para Markdown, permitindo que você use a biblioteca de forma modular.

#### Passo 1: Gerar os Arquivos Markdown

Primeiro, use a função ``to_mkd`` para gerar os arquivos Markdown no diretório de saída (configurado em ``config.yaml``). Seus arquivos .mkd servirão como a base de conhecimento para o sistema RAG.

```python
from pymandua import to_mkd

# This will generate the .mkd files in the 'output' directory
to_mkd(
    urls=["https://pt.wikipedia.org/wiki/Luís_XIV_de_França"],
    keywords=["Luís XIV"],
    wait=2,
    threshold=90
)
```
### Passo 2: Iniciar o Pipeline RAG

Em seguida, use a nova função ``start_rag_pipeline`` para processar os arquivos Markdown existentes e iniciar a interface de usuário. Você pode usar as configurações padrão do ``config.yaml`` ou sobrescrevê-las com parâmetros diretos para maior flexibilidade.

```python
from pymandua import start_rag_pipeline

# Example 1: Use default settings from config.yaml
start_rag_pipeline()


# Example 2: Override models and providers via code
start_rag_pipeline(
    llm_model="llama3-chatqa:8b",
    embedding_model="nomic-embed-text",
    active_provider="ollama",
    persist_directory="./my-rag-db"
)

```

### 🖼️ Fluxo de Processo Completo
O diagrama de fluxo do seu projeto agora é expandido para incluir o pipeline RAG, ilustrando o processo completo da web até a análise com IA.

```mermaid
graph TD
    subgraph Web Scraping & Conversion
        User[User] --> to_mkd(to_mkd);
        to_mkd --> Output[output/];
    end

    subgraph RAG Pipeline
        Output --> start_rag_pipeline(start_rag_pipeline);
        start_rag_pipeline --> Ingest(Ingestion: Embeddings & Storage);
        Ingest --> VectorDB[Vector Database ] ;
        VectorDB --> Gradio[Gradio UI];
        Gradio --> LLM(LLM);
        Gradio --> VectorDB;
    end

    LLM --> Answers[Answers & Tables];
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/seuusuario/web-scraper-with-ai",
    "name": "pymandua",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "scraping, fuzzy logic, HTML to Markdown, JavaScript reactivity, LLM, web scraping, RAG, retrieval-augmented generation",
    "author": "Marcos Henrique Maimoni Campanella",
    "author_email": "\"Marcos H. M. Campanella\" <mhmcamp@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/39/d4/d18bbcf9a91a9104b9f6db9b2fbcaa72ab2e637bc3460ba59e738977da8f/pymandua-0.1.1.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\r\n  <img src=\"midia/Pymandua.png\" alt=\"Pymandua Logo\">\r\n</p>\r\n\r\n# Pymandua: Web Scraper para todos os websites \r\n## Convers\u00e3o de HTML para Markdown para pr\u00e9-processamento de LLMs\r\n\r\nEste projeto \u00e9 uma biblioteca Python que realiza Web Scraping inteligente com l\u00f3gica fuzzy e converte p\u00e1ginas HTML e conte\u00fados relacionados (como subp\u00e1ginas e conte\u00fados renderizados com JS) em um Markdown simplificado, ideal para Large Language Models (LLMs) e an\u00e1lises posteriores.\r\n\r\n---\r\n\r\n## \ud83d\ude80 Funcionalidades\r\n\r\n- Web scraping automatizado com Selenium e suporte a p\u00e1ginas din\u00e2micas\r\n- Convers\u00e3o precisa de HTML para Markdown limpo com suporte a:\r\n  - T\u00edtulos, par\u00e1grafos, listas, links, tabelas, blocos de c\u00f3digo, entre outros\r\n- L\u00f3gica de busca fuzzy para identificar se o conte\u00fado da p\u00e1gina e p\u00e1ginas ao seu redor est\u00e1 relacionado \u00e0s palavras-chave desejadas\r\n- Mecanismo de retorno autom\u00e1tico de p\u00e1ginas visitadas\r\n- Pode ser utilizado como biblioteca ou como script principal\r\n\r\n---\r\n\r\n## \ud83e\udde0 Como Funciona\r\n\r\n### \ud83d\udd0d Web Scraping com Selenium\r\n\r\nO m\u00f3dulo utiliza o `undetected-chromedriver` e `selenium-stealth` com o ``selenium`` para navegar por p\u00e1ginas web, extrair conte\u00fados e retroceder ap\u00f3s a coleta. O conte\u00fado das p\u00e1ginas \u00e9 tratado pelo `BeautifulSoup` e convertido em Markdown por um parser customizado.\r\n\r\n### \ud83e\uddea L\u00f3gica Fuzzy\r\n\r\nA compara\u00e7\u00e3o entre o conte\u00fado da p\u00e1gina e as palavras-chave fornecidas \u00e9 feita com `RapidFuzz`, utilizando similaridade textual (ex: token_sort_ratio). Isso permite validar se a p\u00e1gina realmente trata do tema buscado, mesmo que o texto n\u00e3o seja exatamente igual, ou se existe alguns conte\u00fados ao seu redor (subp\u00e1ginas e conte\u00fados criados a partir de reatividade com JavaScript) para capturar e consolidar em um \u00fanico lugar.\r\n\r\n---\r\n\r\n## \ud83d\uddbc\ufe0f Fluxo do Processo\r\n\r\n\r\n<p align=\"center\">\r\n  <img src=\"midia/flowchart.png\" alt=\"Fluxograma do Processo\" style=\"background: white; padding: 8px; border-radius: 8px;\">\r\n</p>\r\n\r\n\r\n### \ud83e\uddea Instala\u00e7\u00e3o\r\n\r\n**Com pip**\r\n```bash\r\npip install pymandua\r\n```\r\n\r\n\r\n**Ou alternativamente**\r\n1. **Clone o reposit\u00f3rio:**\r\n```bash\r\ngit clone https://github.com/Mark-Campanella/pymandua.git\r\ncd pymandua\r\n```\r\n\r\n2. **Crie um ambiente virtual e ative:**\r\n```bash\r\npython -m venv env\r\nsource env/bin/activate  # Linux/macOS\r\nenv\\Scripts\\activate     # Windows\r\n```\r\n\r\n3. **Instale as depend\u00eancias:**\r\n``` bash\r\npip install -r requirements.txt\r\n```\r\n\r\n\r\n### \ud83d\udd27 Uso como script\r\n```python\r\nfrom pymandua import to_mkd\r\n\r\nresult = to_mkd(\r\n    urls=\"https://pt.wikipedia.org/wiki/Lu\u00eds_XIV_de_Fran\u00e7a\",\r\n    keywords=[\"Lu\u00eds XIV\", \"Fran\u00e7a\", \"Rei Sol\"],\r\n    output_path=r\"projeto/output\",\r\n    wait=2,\r\n    threshold=90\r\n)\r\nprint(result)\r\n\r\n```\r\n\r\n**Uso como CLI**\r\n```bash\r\nto-mkd --urls \"https://exemplo.com\" --keywords \"palavra1,palavra2\" --output \"saida.md\" --wait 2 --threshold 95\r\n```\r\n\r\n### \ud83e\udde9 Estrutura do Projeto\r\n```\r\n\u251c\u2500\u2500 pymandua/              # M\u00f3dulo principal\r\n\u2502   \u251c\u2500\u2500 interface.py       # Interface principal do conversor\r\n\u2502   \u251c\u2500\u2500 converter.py       # Conversor de HTML para Markdown\r\n\u2502   \u251c\u2500\u2500 gatherer.py        # Web scraper e parser de conte\u00fado\r\n\u2502   \u251c\u2500\u2500 driver.py          # Inicializador de driver para o selenium\r\n\u2502   \u251c\u2500\u2500 crawler.py         # Web crawler e parser de conte\u00fado\r\n\u2502   \u251c\u2500\u2500 treater.py         # Prepara para o cleaner\r\n\u2502   \u251c\u2500\u2500 aggregator.py      # Agrega os diversos HTMLs resultantes em um para ser convertido\r\n\u2502   \u251c\u2500\u2500 cleaner.py         # Parser e limpador de conte\u00fado n\u00e3o necess\u00e1rio\r\n\u251c\u2500\u2500 output/                # Arquivos .mkd gerados\r\n\u251c\u2500\u2500 requirements.txt       # Depend\u00eancias\r\n\u251c\u2500\u2500 main.py                # Exemplo de uso\r\n```\r\n\r\n**\ud83d\udcda Refer\u00eancias**\r\n- [Selenium Docs](https://selenium-python.readthedocs.io)\r\n- [BeautifulSoup Docs](https://www.crummy.com/software/BeautifulSoup/bs4/doc/)\r\n- [RapidFuzz Docs](maxbachmann.github.io/RapidFuzz/)\r\n- [RapidFuzz Examples](https://github.com/rapidfuzz/RapidFuzz#examples)\r\n\r\n----------\r\n\r\n### \ud83e\udde0 RAG Pipeline (An\u00e1lise com IA)\r\nEste projeto estende sua funcionalidade principal com um pipeline de An\u00e1lise de Conte\u00fado usando `Retrieval-Augmented Generation (RAG)`. Ele permite que voc\u00ea use os arquivos Markdown gerados para consultas inteligentes, respondendo perguntas e gerando tabelas estruturadas sobre o conte\u00fado.\r\n\r\n### \ud83d\ude80 Funcionalidades Chave do RAG\r\n- Modularidade \"Plug & Play\": Alterne facilmente entre diferentes provedores de LLM (``Ollama, OpenAI, Gemini``) e bancos de dados vetoriais (``ChromaDB, Pinecone``) com a simples altera\u00e7\u00e3o de um par\u00e2metro.\r\n\r\n- Interface Web (UI): Uma interface interativa e amig\u00e1vel, criada com ``Gradio``, que se abre automaticamente no navegador para uma experi\u00eancia de uso otimizada.\r\n\r\n- Gera\u00e7\u00e3o de Tabelas: Pe\u00e7a ao LLM para extrair dados espec\u00edficos e format\u00e1-los em uma tabela Markdown com cabe\u00e7alhos personalizados, ideal para an\u00e1lise.\r\n\r\n### \ud83d\udd27 Uso do Pipeline RAG\r\nO pipeline RAG \u00e9 um processo separado da convers\u00e3o de HTML para Markdown, permitindo que voc\u00ea use a biblioteca de forma modular.\r\n\r\n#### Passo 1: Gerar os Arquivos Markdown\r\n\r\nPrimeiro, use a fun\u00e7\u00e3o ``to_mkd`` para gerar os arquivos Markdown no diret\u00f3rio de sa\u00edda (configurado em ``config.yaml``). Seus arquivos .mkd servir\u00e3o como a base de conhecimento para o sistema RAG.\r\n\r\n```python\r\nfrom pymandua import to_mkd\r\n\r\n# This will generate the .mkd files in the 'output' directory\r\nto_mkd(\r\n    urls=[\"https://pt.wikipedia.org/wiki/Lu\u00eds_XIV_de_Fran\u00e7a\"],\r\n    keywords=[\"Lu\u00eds XIV\"],\r\n    wait=2,\r\n    threshold=90\r\n)\r\n```\r\n### Passo 2: Iniciar o Pipeline RAG\r\n\r\nEm seguida, use a nova fun\u00e7\u00e3o ``start_rag_pipeline`` para processar os arquivos Markdown existentes e iniciar a interface de usu\u00e1rio. Voc\u00ea pode usar as configura\u00e7\u00f5es padr\u00e3o do ``config.yaml`` ou sobrescrev\u00ea-las com par\u00e2metros diretos para maior flexibilidade.\r\n\r\n```python\r\nfrom pymandua import start_rag_pipeline\r\n\r\n# Example 1: Use default settings from config.yaml\r\nstart_rag_pipeline()\r\n\r\n\r\n# Example 2: Override models and providers via code\r\nstart_rag_pipeline(\r\n    llm_model=\"llama3-chatqa:8b\",\r\n    embedding_model=\"nomic-embed-text\",\r\n    active_provider=\"ollama\",\r\n    persist_directory=\"./my-rag-db\"\r\n)\r\n\r\n```\r\n\r\n### \ud83d\uddbc\ufe0f Fluxo de Processo Completo\r\nO diagrama de fluxo do seu projeto agora \u00e9 expandido para incluir o pipeline RAG, ilustrando o processo completo da web at\u00e9 a an\u00e1lise com IA.\r\n\r\n```mermaid\r\ngraph TD\r\n    subgraph Web Scraping & Conversion\r\n        User[User] --> to_mkd(to_mkd);\r\n        to_mkd --> Output[output/];\r\n    end\r\n\r\n    subgraph RAG Pipeline\r\n        Output --> start_rag_pipeline(start_rag_pipeline);\r\n        start_rag_pipeline --> Ingest(Ingestion: Embeddings & Storage);\r\n        Ingest --> VectorDB[Vector Database ] ;\r\n        VectorDB --> Gradio[Gradio UI];\r\n        Gradio --> LLM(LLM);\r\n        Gradio --> VectorDB;\r\n    end\r\n\r\n    LLM --> Answers[Answers & Tables];\r\n```\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Uma biblioteca para scraping com l\u00f3gica fuzzy e convers\u00e3o de HTML e conte\u00fados ao seu redor, lidando com reatividade do javascript para Markdown focado em LLMs. Adicionado com um pipeline RAG.",
    "version": "0.1.1",
    "project_urls": {
        "Homepage": "https://github.com/seuusuario/web-scraper-with-ai",
        "homepage": "https://github.com/Mark-Campanella/pymandua",
        "repository": "https://github.com/Mark-Campanella/pymandua"
    },
    "split_keywords": [
        "scraping",
        " fuzzy logic",
        " html to markdown",
        " javascript reactivity",
        " llm",
        " web scraping",
        " rag",
        " retrieval-augmented generation"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e58a97ab706517c3454db9d744e53fd62b0ef45d9e5fb24888aca140d5bc8814",
                "md5": "811f5bb5da29f3cf0c06858e2ae78784",
                "sha256": "235df00056a7a2f9dbed783edde57b3a754253cc170cc36477cb89ca95a95f9d"
            },
            "downloads": -1,
            "filename": "pymandua-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "811f5bb5da29f3cf0c06858e2ae78784",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 27478,
            "upload_time": "2025-10-06T23:51:57",
            "upload_time_iso_8601": "2025-10-06T23:51:57.731457Z",
            "url": "https://files.pythonhosted.org/packages/e5/8a/97ab706517c3454db9d744e53fd62b0ef45d9e5fb24888aca140d5bc8814/pymandua-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "39d4d18bbcf9a91a9104b9f6db9b2fbcaa72ab2e637bc3460ba59e738977da8f",
                "md5": "719ae2c36d047137a400b4184b6852e0",
                "sha256": "f36fd971b83ab99f52b19e781907cedfe0d63ef0ff743ee73ddb40594f396144"
            },
            "downloads": -1,
            "filename": "pymandua-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "719ae2c36d047137a400b4184b6852e0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 27129,
            "upload_time": "2025-10-06T23:51:58",
            "upload_time_iso_8601": "2025-10-06T23:51:58.920907Z",
            "url": "https://files.pythonhosted.org/packages/39/d4/d18bbcf9a91a9104b9f6db9b2fbcaa72ab2e637bc3460ba59e738977da8f/pymandua-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-06 23:51:58",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "seuusuario",
    "github_project": "web-scraper-with-ai",
    "github_not_found": true,
    "lcname": "pymandua"
}
        
Elapsed time: 1.56325s