Este projeto é um WebCrawler multithread em C# e .NET desenvolvido como desafio técnico. Ele acessa o site proxyservers.pro, extrai informações de proxies de várias páginas e salva os dados em um arquivo JSON, além de registrar logs da execução em um banco de dados SQLite.
- ✅ Extrai os campos:
- IP Address
- Port
- Country
- Protocol
- ✅ Salva os dados extraídos em um arquivo
proxies.json. - ✅ Gera arquivos
.htmlde cada página acessada (para auditoria). - ✅ Registra em banco de dados SQLite:
- Data de início da execução
- Data de término da execução
- Quantidade de páginas processadas
- Quantidade de proxies (linhas) extraídas em todas as páginas
- Caminho do arquivo JSON gerado
- ✅ Execução multithread com até 3 tarefas simultâneas (controle de concorrência com
SemaphoreSlim)
WebCrawler/
│
├── Models/
│ ├── Proxy.cs
│ └── CrawlerLog.cs
│
├── Services/
│ ├── ProxyService.cs
│ ├── IProxyService.cs
│ ├── DatabaseService.cs
│ └── HtmlHelper.cs
│
├── Data/
│ └── ProxyCrawler.db (gerado automaticamente)
│
├── pagina_1.html ... pagina_n.html (gerados na execução)
│
├── proxies.json (resultado final)
│
└── Program.cs (ponto de entrada)
- C# com .NET 6+ — linguagem principal e ambiente de execução.
- HttpClient — usado para realizar as requisições HTTP ao site de proxies.
- HtmlAgilityPack — biblioteca para parse e extração de dados HTML de forma robusta.
- System.Text.Json — utilizado para serializar os dados extraídos para o arquivo
proxies.json. - SQLite com
Microsoft.Data.Sqlite— banco de dados leve para armazenar logs de execução localmente. - Multithreading com
TaskeSemaphoreSlim— permite que até 3 tarefas simultâneas sejam executadas, otimizando a performance do crawler.
- Clone o repositório:
git clone https://github.com/seuusuario/WebCrawler.git
cd WebCrawler- Restaure os pacotes e compile o projeto:
dotnet restore
dotnet build- Execute o projeto:
dotnet runO processo pode levar alguns segundos dependendo da conexão. Verifique os arquivos gerados após a execução:
proxies.jsonpagina_1.html,pagina_2.html, ...Data/ProxyCrawler.db
[
{
"IPAddress": "123.456.789.000",
"Port": "8080",
"Country": "Brazil",
"Protocol": "HTTP"
},
...
]Este projeto é apenas para fins de avaliação técnica.