Cómo evitar errores en los enlaces cuando Scrapy rastrea toda la página web
Recientemente, cuando usé scrapy para rastrear páginas web, encontré muchas situaciones en las que las imágenes no se podían mostrar normalmente y los enlaces de etiquetas no eran válidos. Esto se debía principalmente a que las páginas web rastreadas y las rutas de las imágenes habían perdido su ubicación. La estructura original y las páginas web no se pudieron mostrar correctamente. Busque el recurso correspondiente según el src de la etiqueta o el href de la etiqueta. Realicemos un pequeño estudio sobre este tema.
En primer lugar, para realizar este trabajo, debe modificar la página web, por lo que presentamos la biblioteca BeautifulSoup para analizar la página web.
En segundo lugar, en este artículo, todas las páginas web se guardan con nombres de dominio como nombres de directorio.
Vamos a comentarlo caso por caso.
En términos generales, los enlaces en las páginas web tienen los siguientes formatos:
En el primer caso, el enlace comienza directamente con /, que obviamente comienza desde el directorio raíz del sitio web. podemos agregar directamente la ruta de almacenamiento del sitio web delante de la página (home_path representa la ruta donde se guarda la página web actual en nuestro sistema, incluido el nombre de dominio):
En el segundo caso, el El enlace comienza directamente con http. Puede que haya o no un '/' al final. En este momento, lo indexaremos directamente en index.html o index.jsp en el directorio de nombres de dominio. página web que desea rastrear. Este es solo un ejemplo. dir_website la guarda para nosotros. La ruta de la página web rastreada, excluyendo el nombre de dominio.
En el tercer caso, el enlace aún comienza con http y termina con la ruta específica del recurso. En este momento, no solo necesitamos extraer el nombre de dominio, sino también la ubicación del recurso.
Tenga en cuenta que este nombre de dominio debe extraerse del enlace en lugar de insertar directamente el nombre de dominio del sitio web actualmente rastreado. Esto se debe a que el enlace en el href no necesariamente proviene del sitio web actual y puede indexarse. otros sitios web, en este momento, si rastreamos los sitios web indexados por él al mismo tiempo, aún podemos acceder a ellos normalmente a través de este método.
El cuarto caso: '#content', el enlace en href comienza con '#', lo que significa que después de hacer clic en este enlace, encontrará el elemento con id='content' en el archivo actual. página y cambie a La ubicación de este elemento. No necesitamos lidiar con este tipo de vínculo, simplemente continúe.
Podemos manejar los casos quinto y sexto juntos, gracias a un método del módulo de ruta en Python:
¿Qué significa este método? Puede pasar el Ajustar el formato del? URL entrante al formato correcto, como por ejemplo:
Con este método, podemos convertir directamente los enlaces en el quinto y sexto caso.
En cuanto al séptimo caso, es obvio que este enlace obtiene la página enviando una solicitud al Servlet en el backend, y la página web que rastreamos no tiene un backend, pero sí podemos rastrearla. a esto a través de la página web scrapy, luego agregamos el sufijo .html a la página web rastreada y luego agregamos el sufijo al enlace, para que podamos acceder al recurso de destino haciendo clic en el enlace.
Por supuesto, antes de eso, tenemos que eliminar el '/' en el enlace web, porque es imposible contener '/' en el nombre del archivo de la página web que guardamos.
En este punto, hemos resuelto el problema de los recursos web inaccesibles para la mayoría de las páginas web rastreadas. Lo anterior es el procesamiento de la etiqueta . La etiqueta es la misma. No entraremos en detalles.