🢂Budowa SEO przekierowań w Pythonie
Skrypt analizuje i grupuje adresy URL na podstawie ich ścieżek, następnie generuje i zapisuje do pliku CSV podsumowanie zawierające wzorce przekierowań oraz liczbę unikalnych ścieżek dla każdej grupy
Skrypt ten analizuje adresy URL pod kątem ich struktury, grupuje je na podstawie określonych segmentów ścieżek, a następnie generuje podsumowanie tych grup wraz z liczbą unikalnych ścieżek podsumowanie_przekierowan_{segment}.csv
, które zostają zapisane do pliku CSV z użyciem średnika jako separatora.
#!/usr/bin/env python3
import csv
from collections import defaultdict
from urllib.parse import urlparse, unquote
# Tworzenie klucza grupy na podstawie wybranych segmentów ścieżki
segment = 5
# Plik wejściowy zawierający listę unikalnych adresów URL do analizy
plik_wejsciowy = 'adresy_url2.csv'
# Plik docelowy, do którego zapisane zostaną wyniki analizy przekierowań
plik_wyjsciowy = f'podsumowanie_przekierowan_{segment}.csv'
# Użycie defaultdict do automatycznego tworzenia list dla nowych kluczy
grupy_url = defaultdict(list)
# Otwarcie pliku wejściowego i odczytanie każdego wiersza
with open(plik_wejsciowy, mode='r', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row: # Sprawdzenie, czy wiersz nie jest pusty
# Dekodowanie URL, aby przekształcić znaki zakodowane procentowo na czytelny format
url = unquote(row[0])
# Analiza struktury URL, aby wyodrębnić ścieżkę
parsed_url = urlparse(url)
# Pobranie ścieżki z analizowanego URL
sciezka = parsed_url.path
klucz_grupy = '/'.join(sciezka.split('/')[:segment]) # [:segment] oznacza pobranie segmentu ścieżki
# Dodawanie ścieżki do odpowiedniej grupy w słowniku
grupy_url[klucz_grupy].append(sciezka)
# Sortowanie grup według liczby unikalnych wystąpień ścieżek w każdej z nich
posortowane_grupy = sorted(grupy_url.items(), key=lambda x: len(set(x[1])), reverse=True)
# Otwarcie pliku docelowego do zapisu i ustawienie średnika jako separatora pól
with open(plik_wyjsciowy, mode='w', encoding='utf-8', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=';') # Ustawienie średnika jako separatora pól
# Zapisanie nagłówka pliku CSV
writer.writerow(["Wzorzec przekierowania", "Liczba unikalnych ścieżek w grupie", "Docelowy adres", "Reguła"])
# Dla każdej grupy zapisanie informacji do pliku CSV
for klucz_grupy, sciezki in posortowane_grupy:
liczba_unikalnych_sciezek = len(set(sciezki)) # Obliczenie liczby unikalnych ścieżek
# Zapisanie wiersza do pliku CSV z informacjami o grupie
writer.writerow([f"^{klucz_grupy}/(.*)$", liczba_unikalnych_sciezek])
# Informacja o zakończeniu zapisu i nazwie pliku docelowego
print(f"Zapisano podsumowanie do pliku '{plik_wyjsciowy}'.")
Reguły dla .htaccess
Skrypt poniżej analizuje adresy URL z pliku wejściowego adresy_url2.csv
, grupuje je według określonego segmentu ścieżki segment = 5
, a następnie generuje reguły przekierowań dla serwera Apache, zapisując je do pliku o nazwie htaccess_rules.txt
. Każda reguła przekierowania jest dopasowana do grupy adresów URL i wskazuje na nową ścieżkę, gdzie $1
oznacza dowolny ciąg pasujący do wzorca (.*?) pochodzący z oryginalnej ścieżki. W rzeczywistości, musisz dostosować docelowy_adres
do swoich potrzeb, aby reguły przekierowań były poprawne i odzwierciedlały strukturę Twojej strony.
#!/usr/bin/env python3
import csv
from collections import defaultdict
from urllib.parse import urlparse, unquote
segment = 5
plik_wejsciowy = 'adresy_url2.csv' # Plik wejściowy zawierający listę unikalnych adresów URL do analizy
plik_htaccess = f'htaccess_rules_{segment}.csv' # Plik wyjściowy z regułami .htaccess
grupy_url = defaultdict(list)
with open(plik_wejsciowy, mode='r', encoding='utf-8') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row:
url = unquote(row[0])
parsed_url = urlparse(url)
sciezka = parsed_url.path
klucz_grupy = '/'.join(sciezka.split('/')[:segment])
grupy_url[klucz_grupy].append(sciezka)
posortowane_grupy = sorted(grupy_url.items(), key=lambda x: len(set(x[1])), reverse=True)
# Tworzenie pliku .htaccess z regułami przekierowań
with open(plik_htaccess, mode='w', encoding='utf-8') as htaccess_file:
htaccess_file.write("RewriteEngine On\n\n") # Włączenie mechanizmu przekierowań
id_counter = 1 # Inicjalizacja licznika do generowania unikalnych ID
for klucz_grupy, _ in posortowane_grupy:
# Dostosowanie docelowego adresu URL o unikalne ID
docelowy_adres = f"/nowa/sciezka{id_counter}" # Dostosuj bazowy adres URL, {id_counter} dodaje unikalne ID
regula = f"RewriteRule ^{klucz_grupy}/(.*)$ {docelowy_adres}/$1 [R=301,L]\n"
htaccess_file.write(regula)
id_counter += 1 # Inkrementacja licznika po każdej regule
print(f"Zapisano reguły przekierowań do pliku '{plik_htaccess}' z unikalnymi ID.")
Filtrowanie wybranych adresów URL
Kod ten wczytuje dane z pliku CSV, przepuszcza je przez filtry wyrażeń regularnych, a następnie zapisuje wyniki do nowego pliku CSV. Oczywiście z wybranych adresów możesz zbudować przekierowania :)
#!/usr/bin/env python3
import pandas as pd
import re
# Ładujemy dane z pliku CSV do pandasa
def load_data(file_path):
"""Wczytuje dane z pliku CSV do pandasa"""
return pd.read_csv(file_path)
# Filtrujemy adresy URL na podstawie zestawu regex
def filter_urls(df):
"""Filtruje adresy URL na podstawie zestawu regex"""
# Zestaw regex dopasowujący kluczowe słowa związane z newsami i blogami
blog_news_keywords = re.compile(r'\b(blog|news|post|article|event|update|story|wydarzenie)\b', re.IGNORECASE)
# Zestaw regex dopasowujący słowa, które nie są związane z produktami lub PDFami
exclude_keywords = re.compile(r'\b(product|pdf)\b', re.IGNORECASE)
filtered_urls = [] # Lista z filtrowanymi adresami URL
for url in df.iloc[:, 0]: # Wykonujemy iterację po wszystkich URLach w pliku
if blog_news_keywords.search(url) and not exclude_keywords.search(url):
# Jeżeli URL pasuje do obu regex, to dodajemy go do listy filtrowanych adresów
filtered_urls.append(url)
return filtered_urls
# Zapisujemy dane do nowego pliku CSV
def save_to_csv(filtered_urls, output_file_path):
"""Zapisuje dane do nowego pliku CSV"""
filtered_urls_df = pd.DataFrame(filtered_urls, columns=['URL']) # Tworzymy DataFrame z filtrowanymi adresami URL
filtered_urls_df.to_csv(output_file_path, index=False) # Zapisujemy dane do pliku CSV
if __name__ == "__main__":
file_path = 'adresy_url2.csv' # Scieżka do pliku CSV z adresami URL
output_file_path = 'news.csv' # Scieżka do pliku CSV, do którego zapiszemy filtrowane adresy URL
urls_data = load_data(file_path) # Wczytujemy dane z pliku
filtered_urls = filter_urls(urls_data) # Filtrujemy adresy URL
save_to_csv(filtered_urls, output_file_path) # Zapisujemy dane do nowego pliku CSV
Skrypt do oczyszczania i zapisywania adresów URL z pliku CSV
Usuwamy niechciane adresy URL i zapisujemy oczyszczone dane do pliku CSV.
#!/usr/bin/env python3
import pandas as pd
import re
# Funkcja do wczytywania danych z pliku CSV
def load_data(file_path):
# Wczytanie pliku CSV do DataFrame
return pd.read_csv(file_path)
# Funkcja do usuwania adresów URL zawierających niedozwolone ciągi znaków
def remove_unwanted_urls(df):
# Kompilacja wyrażenia regularnego do wyszukiwania niedozwolonych słów
unwanted_keywords = re.compile(r'\b(product|produkty|produkt|products|uploads|pdf|svg|jpg)\b', re.IGNORECASE)
cleaned_urls = []
# Przejście przez wszystkie URL-e w DataFrame
for url in df.iloc[:, 0]:
# Dodanie URL-a do listy tylko jeśli nie zawiera niedozwolonych słów
if not unwanted_keywords.search(url):
cleaned_urls.append(url)
return cleaned_urls
# Funkcja do zapisu oczyszczonych URL-i do nowego pliku CSV
def save_to_csv(cleaned_urls, output_file_path):
# Utworzenie DataFrame z oczyszczonymi URL-ami
cleaned_urls_df = pd.DataFrame(cleaned_urls, columns=['URL'])
# Zapis DataFrame do pliku CSV
cleaned_urls_df.to_csv(output_file_path, index=False)
# Główny przepływ wykonania skryptu
if __name__ == "__main__":
file_path = 'adresy_url2.csv'
output_file_path = 'cleaned_urls.csv'
urls_data = load_data(file_path) # Wczytanie danych
cleaned_urls = remove_unwanted_urls(urls_data) # Usuwanie niechcianych URL-i
save_to_csv(cleaned_urls, output_file_path) # Zapis do pliku CSV