🚀 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)
- Tag única (
- 🌐 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 Pythonlxml: Parser rápido baseado em Chtml5lib: 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)
🧹 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'}, ...}
🛠 Requisitos
- Python >= 3.6
- beautifulsoup4
- requests
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
│
├── pyproject.toml # ⚙️ Configuração do pacote
├── 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:
- Fork este repositório.
- Crie uma nova branch:
git checkout -b minha-nova-funcionalidade
- Faça suas alterações e commit:
git commit -m "✨ Adicionando nova funcionalidade incrível"
- Envie para o branch:
git push origin minha-nova-funcionalidade
- Abra um Pull Request. 💡
👨💻 Autor
Desenvolvido por Roberto Lima 🚀✨
💬 Contato
- 📧 Email: robertolima.izphera@gmail.com
- 💼 LinkedIn: Roberto Lima
- 💼 Website: Roberto Lima
- 💼 Gravatar: Roberto Lima
📄 Licença
MIT License
Metadata
Release files for scrapy-html 1.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| scrapy_html-1.4.2.tar.gz | 10.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scrapy_html-1.4.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 18.4 kB
Release files / scrapy_html-1.4.2.tar.gz
| Download URL | scrapy_html-1.4.2.tar.gz |
|---|---|
| Size | 10.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6128648720a302a803a8e77e0e63197ec7b1aa80e32980dca3c24aec494b9ed2
|
|
BLAKE2b-256 checksum How to use checksums |
5e178bc3742140ab2197806b3add37d8338ee250b6f74bddb322ec7db062e7d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Release files / scrapy_html-1.4.2-py3-none-any.whl
| Download URL | scrapy_html-1.4.2-py3-none-any.whl |
|---|---|
| Size | 8.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
86e3d1c239c755568ec6ca297df160dd26e49ab204583e4e8ac70b3161cd30dc
|
|
BLAKE2b-256 checksum How to use checksums |
fdb0c02dcb50be89e8a574e10dcaf4b2d8a8cec1ee0028ace91ce50a6f60804b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.15
|
Security for scrapy-html 1.4.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.