Resolvi batizar a aplicação com o nome Monk, uma referências ao seriado. Para construir essa aplicação eu utilizei python3.5+tornado+redis+lxml. Para orquestrar todos esses serviços eu utilizei Docker e Docker Compose. Estando com tudo configurado corretamente, basta executar o comando abaixo.
- O monk já foi modelado pesando nesse cenário. Ele precisa de apenas alguns refactores na feature que grava o csv. E quando o worker for executado, refatorar para ele abrir processos diferentes para cada handler. E depois analisar a quantidade de workers a mais eu preciso rodando, para aumentar a velocidade do scraping.
- Eu usaria o phantomjs.
- Eu usaria um proxy para maquiar a origem da requisição.
- O scraping é um solução paleativa, para o cliente/site que não possui um xml/api/soap que possa ser consultado, para não concorrer com os acessos do site. Eu diminuiria a quantidade de acessos diários e negociaria com cliente para que ele disponibilize esse conteúdo em um xml talvez.
$ docker-compose up
# No MacOsx a primeira vez
$ docker-machine start
$ docker-machine env
$ eval $(docker-machine env)
$ docke-compose up or docke-compose stop
MONK_REDIS_HOST=monk-redis
MONK_REDIS_PORT=6379
MONK_REDIS_DB=0
$ make container-task
Ao fim do processo o worker irá gerar um arquivo com o nome do handler na raiz. epocacosmeticoshandler.csv
$ make container-test
$ make clean-redis
$ make venv
$ source venv/bin/activate
$ make setup-local
$ make test # Para executar os testes da aplicação
$ make test-cov # Para ver a cobetura de testes.
$ make task # Para enfileirar todas as tarefas.
$ ./worker.py # Para processar todas tarefas enfileiradas.
- http://proxymesh.com
- http://www.ninjasproxy.com
- https://www.hidemyass.com
- https://www.proxyrain.com/pricing
- https://scrapinghub.com