Files
fundor333.com/action_script/internal_link.py

92 lines
3.6 KiB
Python

import requests
from bs4 import BeautifulSoup
import json
from urllib.parse import urlparse, urljoin
def get_internal_links_pointing_to_pages(sitemap_url):
"""
Analizza una sitemap e restituisce un JSON con i link interni che
puntano a ciascuna pagina web del sito.
Args:
sitemap_url (str): L'URL della sitemap del sito (es. "https://example.com/sitemap.xml").
Returns:
str: Una stringa JSON con il formato:
{
"pagina_url_1": ["link_referrer_1", "link_referrer_2", ...],
"pagina_url_2": ["link_referrer_3", ...],
...
}
Restituisce una stringa JSON vuota ({}) in caso di errori critici o assenza di dati.
"""
site_pages = []
try:
response = requests.get(sitemap_url)
response.raise_for_status() # Solleva un'eccezione per risposte HTTP errate (4xx o 5xx)
soup = BeautifulSoup(response.content, "xml")
for loc in soup.find_all("loc"):
if "post/2" in loc.text:
site_pages.append(loc.text)
except requests.exceptions.RequestException as e:
print(f"Errore nello scaricare o analizzare la sitemap: {e}")
return json.dumps({}) # Ritorna un JSON vuoto in caso di errore sitemap
if not site_pages:
print("Nessuna URL trovata nella sitemap.")
return json.dumps({}) # Ritorna un JSON vuoto se la sitemap è vuota
base_url = urlparse(sitemap_url).scheme + "://" + urlparse(sitemap_url).netloc
# Inizializza il dizionario per memorizzare i link che puntano a ciascuna pagina
page_referrers = {page: [] for page in site_pages}
for page_url in site_pages:
print(f"Analizzando: {page_url}")
try:
page_response = requests.get(page_url)
page_response.raise_for_status()
page_soup = BeautifulSoup(page_response.content, "html.parser")
for link in page_soup.find_all(
"a", {"class": "interlink-script"}, href=True
):
href = link.get("href")
absolute_href = urljoin(page_url, href)
parsed_absolute_href = urlparse(absolute_href)
# Controlla se il link è interno al dominio e se è una delle pagine del sito
if (
parsed_absolute_href.netloc == urlparse(base_url).netloc
and absolute_href in site_pages
):
# Aggiunge il page_url (la pagina che contiene il link) all'elenco dei referrer
if page_url not in page_referrers[absolute_href]:
page_referrers[absolute_href].append(page_url)
except requests.exceptions.RequestException as e:
print(f"Errore nello scaricare o analizzare la pagina {page_url}: {e}")
continue
except Exception as e:
print(f"Errore generico durante l'analisi di {page_url}: {e}")
continue
return json.dumps(page_referrers, indent=4)
if __name__ == "__main__":
# Sostituisci con l'URL della sitemap del sito che vuoi analizzare
sitemap_url_to_analyze = "https://fundor333.com/sitemap.xml" # Esempio
print(f"Inizio dell'analisi della sitemap: {sitemap_url_to_analyze}")
result_json = get_internal_links_pointing_to_pages(sitemap_url_to_analyze)
print("\n--- Risultato JSON ---")
print(result_json)
# Puoi anche salvare il risultato in un file per un uso successivo
# with open("internal_links.json", "w") as f:
# f.write(result_json)
# print("\nRisultato salvato in internal_links.json")