Con este pequeño programa vamos a extraer todos los enlaces del sitemap de cualquier web y vamos a guardarlos en un archivo csv.
Empezamos con un interfaz que se abre en tu ordenador, donde podemos poner la url del sitemap que queremos explorar. Este interfaz comprueba que es código 200 y seguimos adelante.
from tkinter import Tk,Entry,Button,Label,StringVar,Frame, Text
import requests
import pandas as pd
from bs4 import BeautifulSoup
def enviarSitemap():
try:
xurl = envioUrl.get()
req = requests.get(xurl)
soup=BeautifulSoup(req.text,'lxml')
code=req.status_code
Label(entryFrame, text=("El sitemap responde código: {}".format(code)), fg="red", font=("Poppins", 11)).grid(row=3, column=1, sticky="e",padx=20, pady=10)
except:
Label(entryFrame, text= "La web insertada NO es correcta", fg="gray", font=("Poppins", 11)).grid(row=3, column=1, sticky="e",padx=20, pady=10)
def enviarCrawler():
global indiceSitemap
indiceSitemap = envioUrl.get()
ventana.destroy()
ventana = Tk()
ventana.title("CRAWLER SITEMAP") #Título de la ventana
ventana.columnconfigure(0, weight=1)
ventana.rowconfigure(0, weight=1)
miFrame=Frame(ventana)
miFrame.grid()
entryFrame=Frame(miFrame)
entryFrame.grid(row=4, column=3, sticky="nsew")
Label(entryFrame, text="Inserta la URL del SITEMAP /index_sitemap.xml:", fg="red", font=("Poppins", 14)).grid(row=0, column=0, sticky="w",padx=20, pady=10)
envioUrl = StringVar()
envioUrlEntry=Entry(entryFrame, width=80, textvariable=envioUrl, font=("Poppins", 12))
envioUrlEntry.grid(row=1, columnspan=3,padx=20, pady=20)
botonCode=Button(entryFrame, text="<< 1º Comprobar CODE >>",fg="black", font=("Poppins", 14), command=enviarSitemap)
botonCode.grid(row=3, column=0, sticky="w", padx=20, pady=20)
botonEnvio=Button(entryFrame, text="<< 2º Crawlear SITEMAP >>",fg="black", font=("Poppins", 14), command=enviarCrawler)
botonEnvio.grid(row=3, column=2, sticky="e", padx=20, pady=20)
ventana.mainloop()
Extraemos el index para seguir visitando cada una de las URLs
r = requests.get(indiceSitemap )
soup = BeautifulSoup(r.content)
todas = soup.findAll('loc')
listaXML=[]
for ur in todas:
listaXML.append(ur.getText())
print(listaXML)
Ahora toca extraer las Urls y comprobar que están operativas (código 200) que no están canonicalizadas y que son indexables marcadas con etiqueta index.
listaURL=[]
for ur in listaXML:
r = requests.get(ur)
soup = BeautifulSoup(r.content)
urls=soup.findAll('loc')
for ur in urls:
listaURL.append(ur.getText())
listaLimpia = pd.unique(listaURL)
print(listaLimpia)
con=0
listaCanonical=[]
listaIndex=[]
listaCod=[]
miDiccionario={'Pagina':listaLimpia,'Canonical':listaCanonical, 'Indexable':listaIndex, 'Código':listaCod}
for xurl in listaLimpia:
print("URL principal {}".format(xurl))
req = requests.get(xurl)
soup=BeautifulSoup(req.text,'lxml')
code=req.status_code
print("La web responde código: {}".format(code))
listaCod.append(code)
#///////////Buscamos la etiqueta CANONICAL y la comparamos con la URL////////////////////////////////////
html=soup.find('link', rel="canonical")
if html != None:
canonical=html.get('href')
if xurl != canonical:
listaCanonical.append('No indexable')
print("NO Indexable {}".format(canonical))
else:
listaCanonical.append('Indexable')
print("Misma URL {}".format(canonical))
else:
print("No hay etiqueta canonical")
listaCanonical.append('No canonical')
#//////////// Busca la etiqueta NOINDEX en meta.
html=soup.find_all('meta')
for h in html:
c=h.get('content')
cc=str(c)
if "noindex" in cc:
con=1
print(cc)
break
if con>=1:
print("Hemos encontrado NOINDEX")
listaIndex.append('No index')
con=0
else:
print("No hay etiqueta NOINDEX")
listaIndex.append('Index')
con=0
Por último guardamos todo el contenido en un archivo CSV
frames = pd.DataFrame(miDiccionario)
frames.to_csv('sitemap.csv', encoding = 'utf-8-sig')
frames
Resultados e interpretación
Hemos comprobado todas las URL que esta web tiene en su SiteMap. Todas deben ser código 200 indexables y canonicalizadas hacia si mismas.
Solo una está marcada como noindex.

Compruebo con el inspector y efectivamente es la categoría que no he querido indexar. Lo mejor sería sacarla del sitemap aunque al estar marcada es difícil que la indxe.

Todo puede pasar. Vamos a comprobar en Google «site:pythonparaseo.com/pygame/»

Recuerda que este CSV puedes machearlo con el de Crawleo para encontrar la páginas huerfanas.
Scrapear Material: Automatización en la Recolección de Datos
En el mundo digital actual, scrapear material se ha convertido en una práctica indispensable para muchos profesionales del SEO y el marketing digital. «Scrapear» es el término que se utiliza para referirse al proceso de recolectar información o datos de diversas páginas web de forma automatizada. Esta técnica puede ser particularmente útil para recopilar grandes cantidades de datos en poco tiempo, lo que resulta esencial para el análisis y la toma de decisiones estratégicas basadas en datos concretos.
El scraping puede aplicarse a una gran variedad de áreas, desde la monitorización de precios en comercios electrónicos hasta la agregación de contenido para alimentar bases de datos. Para scrapear material se emplean herramientas y scripts programados específicamente para navegar por la web, acceder a las páginas de interés y extraer la información deseada. Esto puede incluir precios, descripciones de productos, publicaciones en blogs, datos de contacto y mucho más. El proceso se maneja de manera que se respeta la usabilidad y el rendimiento de la web objetivo para evitar posibles bloqueos o penalizaciones por parte de los administradores de los sitios.
Además, al scrapear material y almacenar la información relevante en formatos estructurados como CSV, como se muestra en los ejemplos de código anteriores, facilitamos la integración con otras herramientas y plataformas, permitiendo una manipulación más eficiente y una mejor visualización de los datos recopilados. La eficacia del scraping radica en la precisión y la relevancia del contenido extraído, lo cual asegura que los esfuerzos de SEO y marketing estén orientados y basados en la realidad del ecosistema digital.
Es importante destacar que, aunque el scraping es una técnica poderosa, debe realizarse dentro de los marcos legales y éticos, respetando las políticas de los sitios web y las leyes de protección de datos aplicables. Una práctica responsable de scrapear material no solo protege a los profesionales y empresas de posibles consecuencias legales, sino que también promueve un entorno online más colaborativo y respetuoso.
Juande Marín
Profesor de Marketing digital, divulgador de inteligencia artificial y neuroeducación. Especializado en posicionamiento en buscadores y diseño web. Autor de varios libros relacionados con el comercio electrónico y el marketing digital (McGraw Hill, Paraninfo,…) Juande2marin