Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fernandotholl

Como executar 70 mil requisições curl

Recommended Posts

Boa tarde pessoal!

 

Não utilizava o fórum do imasters, meu primeiro post, gostei muito da estrutura do fórum, bom...

 

Estou com um problema sério, vou tentar explicar o que estou tentando fazer.

 

Preciso capturar informações de outro site, porem é uma quantidade enorme de registros. cerca de 70 mil, eu desenvolvi o script corretamente, fiz os testes com 1000, 2000 requisições e funcionou.

 

Porém o tempo de execução é elevado, em torno de 4 minutos para 1000 registros. Portanto levaria em torno de 6 horas para a execução dos 70mil.

 

Eu capturo esses dados de um Servidor IIS rodando com Oracle, fasso a consulta utilizando CURL do PHP, recebo a página HTML com os dados e utilizo expressões regulares para capturar as informações que eu preciso.

 

Minhas dúvidas são estas, rodar essas 70 mil requisições pode derrubar o site?

 

Estou rodando o script a partir de um servidor dedicado com IP fixo, há a possibilidade de bloquearem o meu IP?

 

O site que capturo essas informações é o site da ANVISA.

Se puderem me ajudar ficaria muito grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que tipo de dados você quer capturar?

Verifique se a própria anvisa não disponibiliza esses dados em algum formato web, como XML...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que tipo de dados você quer capturar?

Verifique se a própria anvisa não disponibiliza esses dados em algum formato web, como XML...

 

Então, eu pensei nisso, a ANVISA até possui um webservice mais é para medicamentos (para sistemas de farmácia) e eu uso para correlatos (produtos para saúde)

 

Em questão dos dados são simples

 

Nome do Produto

Fabricante

Empresa detentora do Registro

CNPJ

Registro no ministérios da Saúde

Origem do produto

Modelo do produto

 

No máximo 10 campos de texto, agora só não tenho certeza se rodando essa quantidade de requisições (CURL) pode ocorrer alguma coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

seriam 70 mil requisições em qual período de tempo ?

 

Se eu executar todo o processo, em torno de 7 horas.

Ele envia uma requisição para cada registro, por isso a demora, eu estive pensando em três possibilidades:

 

1 - sleep de 1/ 2 segundos entre cada requisição;

2 - Separar o processo em etapas (10 mil por dia);

3 - Ou alem de separar por etapas adicionar o sleep de 1/2 segundos para não sobrecarregar.

 

Mais mesmo assim tenho dúvidas quanto ao sucesso da consulta.

Alguém poderia me aconselhar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, acabei adotando a seguinte estratégia.

 

Vou executar a cada dia 10 requisições, infelizmente não encontrei outra solução para o problema.

Mais caso alguem ainda tenha uma idéia ficaria grato

 

att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer as requisições paralelamente usando PCNTL. (não funciona em Windows)

 

Crie vários processos filhos, cada um deles responsável por um conjunto de dados. Utilize socket para permitir que os processos filhos enviem mensagens entre si se necessário (Mediator é adequado aqui) e um banco de dados como MongoDB para aumentar o desempenho.

 

Se a largura de banda do seu servidor permitir, você consegue fazer as 70 mil requisições em cerca de 4 minutos com 70 processos filhos, cada um responsável por 1000 registros.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer as requisições paralelamente usando PCNTL. (não funciona em Windows)

 

Crie vários processos filhos, cada um deles responsável por um conjunto de dados. Utilize socket para permitir que os processos filhos enviem mensagens entre si se necessário (Mediator é adequado aqui) e um banco de dados como MongoDB para aumentar o desempenho.

 

Se a largura de banda do seu servidor permitir, você consegue fazer as 70 mil requisições em cerca de 4 minutos com 70 processos filhos, cada um responsável por 1000 registros.

 

João Batista, obrigado pela dica, agora eu tenho por onde começar, segunda-feira volto a empresa e tento implementar sua proposta de solução.

Quanto ao tráfego acredito que sim.

 

Assim que tiver algo, posto aqui para debatermos.

 

Aproveitando a mensagem, alem da referência php que você me passou, encontrei uma pequena apresentação abordando de forma simples a solução que preciso com PCNTL.

 

http://www.slideshare.net/rodrigodudu/webcrawling-utilizando-php

 

Abração a todos

Compartilhar este post


Link para o post
Compartilhar em outros sites

João Batista, obrigado pela dica, agora eu tenho por onde começar, segunda-feira volto a empresa e tento implementar sua proposta de solução.

Quanto ao tráfego acredito que sim.

 

Assim que tiver algo, posto aqui para debatermos.

 

Aproveitando a mensagem, alem da referência php que você me passou, encontrei uma pequena apresentação abordando de forma simples a solução que preciso com PCNTL.

 

http://www.slideshare.net/rodrigodudu/webcrawling-utilizando-php

 

Abração a todos

 

 

João, considerei sua idéia de trabalhar com processos interessante, porém é um pouco complexa pra mim e quase não encontrei informação sobre isso em PHP.

Você poderia me dar uma luz? De como devo começar.

 

Para deixar mais claro o que eu preciso vou explicar o processo que executo:

 

1° Realizo uma busca primária na anvisa, e ela me retorna a seguinte página:

 

1.jpg

 

Essa página traz 50 registros por vez. Capturo com ER os dados dos 50 registros e armazeno num array.

 

2º Capturado os 50 registros, executo outro CURL para cada registro encontrado nessa página

Preciso fazer isso pois na primeira página sõ tenho código e nome do material, não tendo o resto dos dados que preciso.

 

Então resumindo a cada 1 requisição que me retorna 50 registros, eu executo mais 50 requisições para pegar os detalhes desses materiais.

 

Se alguem puder me ajudar ficaria muito grato.

 

Att.

Fernando Tholl

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for fazer, faça em uma única vez no final de semana, tenho um site com um 1,2 milhão de registro, se você tentar pegar algumas centenas, já dispara um email a cada hora me informando que além do Craw do Google, Bing e Yahoo existe outro dando boot.

 

Mais ou menos assim

 

Controle de BOOT - IP!


Verificar IP com acesso > 30 por dia!,
207.46.204.241 | Total = 32
66.249.71.51 | Total = 54120

 

 

Boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.