Skip to main content

🌐 Um scraper que retorna o HTML completo de uma URL, tags, classes e atributos usando BeautifulSoup

Project description

🚀 README.md

🌐 Scrapy-HTML

🔍 Scrapy-HTML é um pacote Python simples e eficiente para scraping de conteúdo HTML de qualquer página web. Agora com parâmetros avançados para filtragem por tag, múltiplas tags, classe CSS e atributos personalizados, tornando a raspagem muito mais flexível e poderosa. Ele utiliza as bibliotecas BeautifulSoup4 e Requests para realizar a raspagem e retornar o HTML de forma estruturada e legível.


Características Principais

  • 🌎 Faz scraping de qualquer página web com uma URL válida.
  • 🔍 Filtragem avançada por:
    • Tag única (tag)
    • Múltiplas tags (tags)
    • Classe CSS (class_)
    • ID (id_)
    • Atributos personalizados (attrs)
    • Headers HTTP personalizados (headers)
  • 🌐 Suporte a Proxies:
    • Configuração de proxies HTTP/HTTPS
    • Timeout personalizado para requisições via proxy
  • Múltiplos parsers HTML:
    • html.parser (padrão): Parser nativo do Python
    • lxml: Parser rápido baseado em C
    • html5lib: Parser mais leniente e compatível com HTML5
  • ⚡ Retorna o HTML formatado e legível usando BeautifulSoup.
  • 🔒 Tratamento de erros robusto para URLs inválidas ou problemas de rede.
  • 💡 Leve e fácil de usar, com dependências mínimas.
  • 🧹 Validação e Limpeza de Dados:
    • Limpeza de texto e HTML
    • Validação de URLs
    • Sanitização de atributos HTML
    • Extração de dados estruturados (meta tags, JSON-LD, Open Graph, Twitter Cards)

Instalação

Instale o pacote diretamente do PyPI:

pip install scrapy_html

📦 Parsers Opcionais

Para usar parsers alternativos, instale as dependências opcionais:

# Para usar o parser lxml (mais rápido)
pip install scrapy_html[lxml]

# Para usar o parser html5lib (mais leniente)
pip install scrapy_html[html5lib]

# Para usar todos os parsers
pip install scrapy_html[lxml,html5lib]

💻 Como Usar

🔥 Exemplo básico de uso:

from scrapy_html.scraper import get_html_content

# 🌐 URL da página
url = "https://www.example.com"

# 🔄 Obtendo o conteúdo HTML completo
dados = get_html_content(url)
print(dados)

🎯 Filtragem Avançada:

🔍 Filtrar por tag única:

dados = get_html_content(url, tag="p")
print(dados)  # Exibe todas as tags <p>

🏷 Filtrar por múltiplas tags:

dados = get_html_content(url, tags="div,span")
print(dados)  # Exibe todas as tags <div> e <span>

🎨 Filtrar por classe CSS:

dados = get_html_content(url, tag="a", class_="link-destaque")
print(dados)

🆔 Filtrar por ID:

dados = get_html_content(url, tag="section", id_="conteudo-principal")
print(dados)

🛠 Filtrar por atributos personalizados:

dados = get_html_content(url, tag="img", attrs={"alt": "Imagem principal"})
print(dados)

🔒 Usar headers personalizados:

headers = {
    "User-Agent": "Mozilla/5.0",
    "Accept": "text/html",
    "Accept-Language": "pt-BR"
}
dados = get_html_content(url, headers=headers)
print(dados)

🔍 Usar diferentes parsers HTML:

# Usando o parser padrão (html.parser)
dados = get_html_content(url)
print(dados)

# Usando o parser lxml (mais rápido)
dados = get_html_content(url, parser="lxml")
print(dados)

# Usando o parser html5lib (mais leniente)
dados = get_html_content(url, parser="html5lib")
print(dados)

🌐 Usar proxies:

proxies = {
    "http": "http://proxy1:8080",
    "https": "https://proxy2:8080"
}
dados = get_html_content(
    url,
    proxies=proxies,
    proxy_timeout=30  # timeout em segundos
)
print(dados)

🛠 Requisitos

As dependências são instaladas automaticamente com:

pip install scrapy_html

🧪 Testes

Este projeto inclui testes usando pytest. Para rodar os testes localmente:

pip install pytest
pytest tests/

🎨 Recursos Futuros

  • 🔍 Parâmetros avançados para scraping filtrado.
  • 🌐 Suporte a diferentes parsers (lxml, html5lib).
  • 🌐 Suporte a proxies HTTP/HTTPS.
  • 🔄 Scraping assíncrono para maior desempenho.
  • ⚡ Download de recursos estáticos (imagens, CSS, JS).
  • 🧪 Testes automatizados avançados com requests-mock.

🏗 Estrutura do Projeto

scrapy_html/
│
├── scrapy_html/             # 📦 Código principal
│   ├── __init__.py
│   └── scraper.py           # ⚡ Função principal: get_html_content()
│
├── tests/                   # 🧪 Testes automatizados
│   └── test_scraper.py
│
├── setup.py                 # ⚙️ Configuração para PyPI
├── pyproject.toml           # 📦 Configuração moderna
├── README.md                # 📚 Documentação do projeto
├── LICENSE                  # 📜 Licença MIT
└── MANIFEST.in              # 📋 Inclusão de arquivos extras

🔧 Contribuindo

Contribuições são bem-vindas! 🚀
Para contribuir, siga estas etapas:

  1. Fork este repositório.
  2. Crie uma nova branch:
    git checkout -b minha-nova-funcionalidade
    
  3. Faça suas alterações e commit:
    git commit -m "✨ Adicionando nova funcionalidade incrível"
    
  4. Envie para o branch:
    git push origin minha-nova-funcionalidade
    
  5. Abra um Pull Request. 💡

👨‍💻 Autor

Desenvolvido por Roberto Lima 🚀✨


💬 Contato


📄 Licença

MIT License

🧹 Validação e Limpeza de Dados:

from scrapy_html import DataValidator

validator = DataValidator()

# Limpeza de texto
texto_limpo = validator.clean_text("  Hello   World  ")
print(texto_limpo)  # "Hello World"

# Limpeza de HTML
html_limpo = validator.clean_html("<script>alert('test');</script><p>Hello</p>")
print(html_limpo)  # "<p>Hello</p>"

# Validação de URL
url_valida = validator.validate_url("http://example.com")
print(url_valida)  # True

# Sanitização de atributos
from bs4 import BeautifulSoup
html = '<a href="http://example.com" onclick="alert(1)">Link</a>'
soup = BeautifulSoup(html, 'html.parser')
tag = soup.find('a')
tag_sanitizada = validator.sanitize_attributes(tag)
print(tag_sanitizada)  # <a href="http://example.com">Link</a>

# Extração de dados estruturados
dados = validator.extract_structured_data("""
    <meta name="description" content="Test">
    <meta property="og:title" content="Test OG">
    <script type="application/ld+json">
        {"@type": "WebPage"}
    </script>
""")
print(dados)  # {'meta': {'description': 'Test'}, 'open_graph': {'title': 'Test OG'}, ...}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scrapy_html-1.4.0.tar.gz (10.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scrapy_html-1.4.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file scrapy_html-1.4.0.tar.gz.

File metadata

  • Download URL: scrapy_html-1.4.0.tar.gz
  • Upload date:
  • Size: 10.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for scrapy_html-1.4.0.tar.gz
Algorithm Hash digest
SHA256 54c163824b61073979aaaa95d7058cbb4878ee93e405c16c05664d3ae9a4654e
MD5 ca0bd35365db82472cba1e02d629e975
BLAKE2b-256 1fdecc2f0b7ac0ed1182cc18755eb7bfabb4b8c978878a9af84466d158d4dc12

See more details on using hashes here.

File details

Details for the file scrapy_html-1.4.0-py3-none-any.whl.

File metadata

  • Download URL: scrapy_html-1.4.0-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for scrapy_html-1.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3a741c5597500740631e7233b97c5f3d32b0c5fd596585a0f9cfc3b5667f7e9f
MD5 0edfcc7fbab5db1b7f0791b8e5355785
BLAKE2b-256 f1fca611b9b0c3c2869f9fa4b5a4e1138a1bff5b553b65c5271451f05b4f81e2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page