php hyperlink logic web-crawler

Enlaces web crawler/lógica de página en PHP



hyperlink logic (3)

Tendría que buscar http: // en el href. De lo contrario, podría determinar si comienza con ./ o con cualquier combinación de "./". Si no encuentra una "/", debería asumir que es un archivo. ¿Le gustaría un guión para esto?

Estoy escribiendo un rastreador básico que simplemente almacena en caché las páginas con PHP.

Todo lo que hace es usar get_file_contents para obtener los contenidos de una página web y regex para obtener todos los enlaces <a href="URL">DESCRIPTION</a> - en el momento en que regresa:

Array { [url] => URL [desc] => DESCRIPTION }

El problema que estoy teniendo es averiguar la lógica detrás de determinar si el enlace de la página es local o si puede estar en un directorio local completamente diferente.

Podría ser cualquier cantidad de combinaciones: es decir href="../folder/folder2/blah/page.html" o href="google.com" o href="page.html" - las posibilidades son infinitas.

¿Cuál sería el algoritmo correcto para abordar esto? No quiero perder ningún dato que pueda ser importante.


Primero consideremos las propiedades de los enlaces locales.

Estos serán:

  • relativo sin esquema y sin host , o
  • absoluta con un esquema de ''http'' o ''https'' y un host que coincida con la máquina desde la que se ejecuta el script

Esa es toda la lógica que necesitaría identificar si un enlace es local.

Use la función parse_url para separar los diferentes componentes de una URL para identificar el esquema y el host .


En primer lugar, regex y HTML no se mezclan. Utilizar:

foreach(DOMDocument::loadHTML($source)->getElementsByTagName(''a'') as $a) { $a->getAttribute(''href''); }

Los enlaces que pueden salir de su sitio comienzan con el protocolo o // , es decir,

http://example.com //example.com/

href="google.com" es un enlace a un archivo local.

Pero si desea crear una copia estática de un sitio, ¿por qué no simplemente usar wget ?