el rastreador no se inserta en la base de datos después de cierta cantidad de filas

Tengo un rastreador que raspa un sitio web para obtener información y luego inserta los valores en una base de datos, parece que inserta bien las primeras 4000 filas, pero de repente deja de insertar valores en la base de datos mysql aunque el rastreador todavía raspa el sitio web.

Tabla de base de datos

CREATE TABLE IF NOT EXISTS `catalog` (
  `id` varchar(100) NOT NULL DEFAULT '',
  `title` varchar(100) DEFAULT NULL,
  `value` double DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Función de inserción de PHP

function addToCatalog($id, $title, $value){
   $q = "INSERT INTO catalog VALUES('$id', '$title', $value)";
   return mysql_query($q, $this->connection);           
}

función de raspado de php

function scrape($pageNumber){
   $page = file_get_html('http://example.com/p='.$pageNumber);  

   if($page){
      $id = array();
      $title = array();
      $value = array();

      //id
      if($page->find('.productid')){
         foreach ($page->find('.productid') as $p) {
            $id[] = $p->innertext;
         }          
      }

      //title
      if($page->find('.title')){
         foreach($page->find('.title') as $p){
            $title[] = $p->innertext;
         }
      }

      //value
      if($page->find('.value')){
         foreach($page->find('.value') as $p){
            $value[] = $p->innertext;
         }
      }

      for($i=0; $i<sizeof($id); $i++){
          $add = $database->addToCatalog($id[$i], $title[$i], $value[$i]);
          echo $id[$i]." ".$title[$i]." ".$value[$i]."<br>";
      }
   }
}

for($i=0; $i<31300; $i++){
    scrape($i);
}

Cualquier ayuda con este problema sería apreciada.

preguntado el 12 de junio de 12 a las 21:06

A donde llamas addToCatalog? -

¿Cómo sabe que el rastreador todavía raspa el sitio web después de que los elementos dejan de insertarse? -

¿Está comprobando ese valor de retorno de la consulta de inserción? Asumir que una consulta tiene éxito es una mala manera de hacerlo. -

@MarcB porque estoy imprimiendo los resultados a medida que avanzo -

Si no hay .value elemento en la página, o si su contenido no es un número, su consulta fallará. ¿Quizás ese es el problema? -

2 Respuestas

Si la ejecución del proceso se detiene después de unos 30 segundos, su problema probablemente sea el max_execution_time ajuste.

Respondido el 12 de junio de 12 a las 21:06

no, eso no puede ser, el tiempo de inserción para cada fila toma menos de un segundo - mk_89

¿Cuánto tiempo? 0.9 sería excepcionalmente largo. - Sherlock

No lo sé exactamente porque no lo he cronometrado, pero no supera mi max_execution_time - mk_89

max_execution_time es para todo el script (a menos que lo esté ejecutando desde la línea de comandos, ¿verdad?). Entonces puede que se exceda, ya que estás raspando 31300 páginas. - bfavaretto

Entonces, ¿qué error te da? No me estás convenciendo de que no es el max_execution_time. PHP no deja de ejecutarse sin un mensaje, a menos que esté suprimiendo los mensajes de error. - Sherlock

Tuve un problema similar no hace mucho tiempo, resulta que se debió a que PHP se ejecutaba como FastCGI y un demonio de proceso finalizaba la secuencia de comandos, intente contar el número de segundos que tarda antes de que finalice la secuencia de comandos, si es la misma cantidad cada vez, intente cambiar a CGI y luego intentarlo de nuevo.

También podría ser que su servidor web finalice el script para proteger los recursos compartidos, por lo que si está utilizando un servidor de alojamiento compartido, puede valer la pena actualizarlo.

Respondido el 12 de junio de 12 a las 21:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.