crawler - web scraping php api
Código lógico en PHP/Laravel con sistema Job Queue (1)
Estoy haciendo un raspador web usando Laravel 3 y tengo un resque
sistema de cola.
Pregunta: ¿Dónde debería colocar el código de la lógica de raspado?
En la clase de trabajador / trabajo?
¿En una clase de biblioteca llamada estáticamente por el trabajador / clase de trabajo?
¿En una función de controlador y la clase worker / job activa la función del controlador?
Actualmente lo tengo en la función de controlador, así que puedo probarlo yendo a su url. Esto también permite trabajos recurrentes usando Cron, ya que resque
no permite trabajos recurrentes. Todavía necesitaré retener esta manera fácil de probar las funciones de raspado.
Intento: esto es lo que estoy pensando, ¿cómo organizarás tu código para tales fines?
Clase trabajadora
class ScraperWorker
{
public function perform()
{
$url = $this->args[''url'']
Scraper::do_scrape($url);
}
}
Clase de raspado
class Scraper
{
public static function do_scrape($url) {
//some scraping code
}
}
Clase de controlador
Para una prueba rápida, y para que los trabajos de Cron lleguen
class Scraper_Controller extends Base_Controller {
public function test_scrape($url) {
Scraper::do_scrape($url);
}
}
Creo que estás en el camino correcto. Una cosa que podrías cambiar es hacer que el raspador y sus métodos NO sean estáticos. Eso haría que no fuera más difícil de usar, pero MUCHO más fácil de probar por unidad. Esto se vuelve especialmente importante más adelante, cuando el raspador se vuelve más complejo y necesita configuración.
PD. Compruebe PHP-Spider : una araña / raspador extensible y configurable. Podría ahorrarte mucho trabajo. Nota: Actualmente no tiene implementación predeterminada para trabajadores remotos, pero eso está en la hoja de ruta para un futuro muy cercano. Divulgación completa: lo escribí.