/ / Curl php raspando a través del trabajo cron cada minuto en el alojamiento compartido: php, curl, cron, screen scraping, trabajos

Curl php raspando a través del trabajo cron cada minuto en el alojamiento compartido: php, curl, cron, screen scraping, trabajos

Tengo un problema complicado. Estoy en un alojamiento compartido básico. He creado un buen script de raspado usando curl y php.

Porque el multihilo con Curl no es realmenteLos subprocesos de subprocesos múltiples e incluso los mejores scripts de subprocesos de rizos que he usado están acelerando en 1,5-2 el raspado, llegué a la conclusión de que debo ejecutar una gran cantidad de tareas cron (como 50) por minuto en mi php script que interactúa con una tabla mysql para ofrecer un rápido raspado web a mis clientes.

Mi problema es que obtengo un "servidor Mysql ha desaparecido" cuando tengo muchas tareas cron en ejecución al mismo tiempo. Si disminuyo el número de tareas cron, seguirá funcionando pero siempre lento.

También he intentado una solución basada en navegador porrecargando el script cada vez que se termina el tiempo. Funciona mejor, pero siempre el mismo problema: cuando decido ejecutar 10 veces el script al mismo tiempo, comienza a sobrecargar el servidor mysql o el servidor web (no lo sé)

Para resolver esto, he adquirido un servidor mysql donde puedo configurar my.cnf ... pero el problema sigue siendo aproximadamente el mismo.

========= MI PREGUNTA ES : ¿De dónde viene el problema? TAMAÑO DE LA MESA ? NECESITO UN SERVIDOR DEDICADO GRANDE DE 100MBPS. SI ES SÍ, ¿ESTÁ SEGURO DE QUE RESOLVERÁ EL PROBLEMA, Y CUÁN RÁPIDO ES? AL CONOCER, QUIERO QUE LA VELOCIDAD DE EXTRACCIÓN APROXIMETIVAMENTE A 100 URLS POR SEGUNDO (en este momento, va a 1 URL por 15 segundos, increíblemente lenta ...)

  • Sólo hay uno mientras está en el guión. Carga todos los datos de coincidencia de página y preg o dom e inserta en la base de datos mysql.

  • Extraigo muchos datos, es por esto que una tablacontiene rápidamente millones de entradas ... pero cuando las elimino, quizás vaya un poco más rápido pero siempre es el mismo problema: es imposible ejecutar tareas masivamente en paralelo para acelerar el proceso.

  • No creo que el problema venga de mi script. En todos los casos, incluso optimizado perfectamente, no iré tan rápido como quiero.

  • Estuve usando el script withotu proxies para raspar, pero la diferencia es muy pequeña ... no significativa ...

Mi conclusión es que necesito usar un dedicadoservidor, pero no quiero invertir como 100 $ al mes si no estoy seguro. Resolverá el problema y podré ejecutar estas enormes cantidades de tareas / llamadas cron en el db de mysql sin problema.

Respuestas

0 para la respuesta № 1

Es tan fácil ... nunca envíe multiprocesos en la misma URL. Pueden ser muchas URL diferentes. Pero trate de respetar un cierto tiempo de espera. Puede hacerlo con:

sleep($random);  $random = random(15, 35) ; // in seconds

0 para la respuesta № 2

Tendría que ver el código pero, en esencia, parece que tu host está limitando la velocidad.

¿Es posible ejecutar su cron una vez por minuto o dos, pero agrupar los rasguños en una conexión SQL en su script?

Esencialmente, el objetivo sería abrir el socket sql una vez y ejecutar múltiples raspaduras de URL en la conexión frente a su actual raspa por mysql connect, con la esperanza de evitar la limitación de velocidad de su host.

Pseudo-código:

<?php
$link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db");
$sql = "SELECT url FROM urls_table WHERE scraped="0" LIMIT 100";
$result = mysqli_query($link, $sql);
while($row = mysqli_fetch_array($result, MYSQLI_NUM)){
$url_to_scrape = $row[0];
//TODO: your scrape code goes here
}
//Only AFTER you"ve scraped multiple URLs do we close the connection
//this will drastically reduce the number of SQL connects and should help
mysqli_close($link);
?>