5 skryptów Pythona do automatyzacji zadań SEO

Opublikowany: 2023-04-12

Python to potężny język programowania, który zyskał popularność w branży SEO w ciągu ostatnich kilku lat.

Dzięki stosunkowo prostej składni, wydajnej wydajności oraz obfitości bibliotek i frameworków, Python zrewolucjonizował podejście wielu SEOwców do swojej pracy.

Python oferuje wszechstronny zestaw narzędzi, dzięki którym proces optymalizacji może być szybszy, dokładniejszy i skuteczniejszy.

W tym artykule omówiono pięć skryptów w języku Python, które pomogą zwiększyć wysiłki związane z SEO.

  • Zautomatyzuj mapę przekierowań.
  • Masowo twórz metaopisy.
  • Analizuj słowa kluczowe za pomocą N-gramów.
  • Grupuj słowa kluczowe w klastry tematyczne.
  • Dopasuj listę słów kluczowych do listy predefiniowanych tematów.

Najłatwiejszy sposób na rozpoczęcie pracy z Pythonem

Jeśli chcesz zanurzyć się w programowaniu w Pythonie, warto rozważyć Google Colab.

Jest to bezpłatna platforma internetowa, która zapewnia wygodne miejsce do pisania i uruchamiania kodu w języku Python bez konieczności skomplikowanej konfiguracji lokalnej.

Zasadniczo umożliwia dostęp do notatników Jupyter w przeglądarce i zapewnia wiele wstępnie zainstalowanych bibliotek do nauki o danych i uczenia maszynowego.

Ponadto jest zbudowany na Dysku Google, dzięki czemu możesz łatwo zapisywać i udostępniać swoją pracę innym.

Aby rozpocząć, wykonaj następujące kroki:

Włącz przesyłanie plików

Po otwarciu Google Colab musisz najpierw włączyć możliwość tworzenia tymczasowego repozytorium plików. To tak proste, jak kliknięcie ikony folderu.

Umożliwia to przesyłanie plików tymczasowych, a następnie pobieranie dowolnych plików z wynikami.

Dostęp do folderu

Prześlij dane źródłowe

Wiele naszych skryptów w języku Python wymaga do działania pliku źródłowego. Aby przesłać plik, po prostu kliknij przycisk przesyłania.

Przycisk przesyłania plików

Po zakończeniu konfiguracji możesz rozpocząć testowanie następujących skryptów języka Python.

Skrypt 1: Zautomatyzuj mapę przekierowań

Tworzenie map przekierowań dla dużych witryn może być niezwykle czasochłonne. Znalezienie sposobów na automatyzację procesu może pomóc nam zaoszczędzić czas i skupić się na innych zadaniach.

Jak działa ten skrypt

Skrypt ten koncentruje się na analizie treści internetowych w celu znalezienia ściśle pasujących artykułów.

  • Najpierw importuje dwa pliki TXT z adresami URL: jeden dla przekierowanej witryny (source_urls.txt), a drugi dla witryny wchłaniającej przekierowaną witrynę (target_urls.txt).
  • Następnie używamy biblioteki Python Beautiful Soup do stworzenia narzędzia do skrobania stron internetowych, aby uzyskać główną zawartość strony. Ten skrypt ignoruje zawartość nagłówka i stopki.
  • Po zaindeksowaniu treści na wszystkich stronach używa biblioteki Pythona Polyfuzz do dopasowania treści między adresami URL z procentem podobieństwa.
  • Na koniec drukuje wyniki w pliku CSV, w tym procent podobieństwa.

W tym miejscu możesz ręcznie przejrzeć wszystkie adresy URL o niskim procencie podobieństwa, aby znaleźć następne najbliższe dopasowanie.

Pobierz skrypt

 #import libraries from bs4 import BeautifulSoup, SoupStrainer from polyfuzz import PolyFuzz import concurrent.futures import csv import pandas as pd import requests #import urls with open("source_urls.txt", "r") as file: url_list_a = [line.strip() for line in file] with open("target_urls.txt", "r") as file: url_list_b = [line.strip() for line in file] #create a content scraper via bs4 def get_content(url_argument): page_source = requests.get(url_argument).text strainer = SoupStrainer('p') soup = BeautifulSoup(page_source, 'lxml', parse_only=strainer) paragraph_list = [element.text for element in soup.find_all(strainer)] content = " ".join(paragraph_list) return content #scrape the urls for content with concurrent.futures.ThreadPoolExecutor() as executor: content_list_a = list(executor.map(get_content, url_list_a)) content_list_b = list(executor.map(get_content, url_list_b)) content_dictionary = dict(zip(url_list_b, content_list_b)) #get content similarities via polyfuzz model = PolyFuzz("TF-IDF") model.match(content_list_a, content_list_b) data = model.get_matches() #map similarity data back to urls def get_key(argument): for key, value in content_dictionary.items(): if argument == value: return key return key with concurrent.futures.ThreadPoolExecutor() as executor: result = list(executor.map(get_key, data["To"])) #create a dataframe for the final results to_zip = list(zip(url_list_a, result, data["Similarity"])) df = pd.DataFrame(to_zip) df.columns = ["From URL", "To URL", "% Identical"] #export to a spreadsheet with open("redirect_map.csv", "w", newline="") as file: columns = ["From URL", "To URL", "% Identical"] writer = csv.writer(file) writer.writerow(columns) for row in to_zip: writer.writerow(row)

Skrypt 2: Masowe pisanie metaopisów

Chociaż metaopisy nie są bezpośrednim czynnikiem rankingowym, pomagają nam poprawić nasze organiczne współczynniki klikalności. Pozostawienie pustych metaopisów zwiększa szanse, że Google utworzy własne.

Jeśli audyt SEO wykaże dużą liczbę adresów URL, w których brakuje metaopisu, znalezienie czasu na ręczne napisanie ich wszystkich może być trudne, zwłaszcza w przypadku witryn e-commerce.

Ten skrypt ma na celu pomóc Ci zaoszczędzić czas, automatyzując ten proces.

Jak działa skrypt

  • Najpierw skrypt importuje listę adresów URL z pliku TXT (urls.txt).
  • Następnie analizuje całą zawartość adresów URL.
  • Po przeanalizowaniu treści tworzy metaopisy, które mają mieć mniej niż 155 znaków.
  • Eksportuje wyniki do pliku CSV.

Pobierz skrypt

 !pip install sumy from sumy.parsers.html import HtmlParser from sumy.nlp.tokenizers import Tokenizer from sumy.nlp.stemmers import Stemmer from sumy.utils import get_stop_words from sumy.summarizers.lsa import LsaSummarizer import csv #1) imports a list of URLs from a txt file with open('urls.txt') as f: urls = [line.strip() for line in f] results = [] # 2) analyzes the content on each URL for url in urls: parser = HtmlParser.from_url(url, Tokenizer("english")) stemmer = Stemmer("english") summarizer = LsaSummarizer(stemmer) summarizer.stop_words = get_stop_words("english") description = summarizer(parser.document, 3) description = " ".join([sentence._text for sentence in description]) if len(description) > 155: description = description[:152] + '...' results.append({ 'url': url, 'description': description }) # 4) exports the results to a csv file with open('results.csv', 'w', newline='') as f: writer = csv.DictWriter(f, fieldnames=['url','description']) writer.writeheader() writer.writerows(results)

Skrypt 3: Analizuj słowa kluczowe za pomocą N-gramów

N-gramy nie są nową koncepcją, ale nadal są przydatne w SEO. Mogą nam pomóc zrozumieć motywy w dużych zbiorach danych słów kluczowych.

N-gramy

Jak działa ten skrypt

Wynikiem tego skryptu jest plik TXT, który dzieli słowa kluczowe na unigramy, bigamy i trygramy.

  • Najpierw importuje plik TXT zawierający wszystkie słowa kluczowe (keyword.txt).
  • Następnie używa biblioteki Pythona o nazwie Counter do analizy i wyodrębnienia N-gramów.
  • Następnie eksportuje wyniki w nowym pliku TXT.

Pobierz ten skrypt

 #Import necessary libraries import re from collections import Counter #Open the text file and read its contents into a list of words with open('keywords.txt', 'r') as f: words = f.read().split() #Use a regular expression to remove any non-alphabetic characters from the words words = [re.sub(r'[^a-zA-Z]', '', word) for word in words] #Initialize empty dictionaries for storing the unigrams, bigrams, and trigrams unigrams = {} bigrams = {} trigrams = {} #Iterate through the list of words and count the number of occurrences of each unigram, bigram, and trigram for i in range(len(words)): # Unigrams if words[i] in unigrams: unigrams[words[i]] += 1 else: unigrams[words[i]] = 1 # Bigrams if i < len(words)-1: bigram = words[i] + ' ' + words[i+1] if bigram in bigrams: bigrams[bigram] += 1 else: bigrams[bigram] = 1 # Trigrams if i < len(words)-2: trigram = words[i] + ' ' + words[i+1] + ' ' + words[i+2] if trigram in trigrams: trigrams[trigram] += 1 else: trigrams[trigram] = 1 # Sort the dictionaries by the number of occurrences sorted_unigrams = sorted(unigrams.items(), key=lambda x: x[1], reverse=True) sorted_bigrams = sorted(bigrams.items(), key=lambda x: x[1], reverse=True) sorted_trigrams = sorted(trigrams.items(), key=lambda x: x[1], reverse=True) # Write the results to a text file with open('results.txt', 'w') as f: f.write("Most common unigrams:\n") for unigram, count in sorted_unigrams[:10]: f.write(unigram + ": " + str(count) + "\n") f.write("\nMost common bigrams:\n") for bigram, count in sorted_bigrams[:10]: f.write(bigram + ": " + str(count) + "\n") f.write("\nMost common trigrams:\n") for trigram, count in sorted_trigrams[:10]: f.write(trigram + ": " + str(count) + "\n")

Skrypt 4: Grupuj słowa kluczowe w grupy tematyczne

W przypadku nowych projektów SEO badanie słów kluczowych jest zawsze na wczesnym etapie. Czasami mamy do czynienia z tysiącami słów kluczowych w zbiorze danych, co utrudnia grupowanie.

Python pozwala nam automatycznie grupować słowa kluczowe w podobne grupy, aby identyfikować trendy trendów i uzupełniać nasze mapowanie słów kluczowych.

Jak działa ten skrypt

  • Ten skrypt najpierw importuje plik TXT ze słowami kluczowymi (keywords.txt).
  • Następnie skrypt analizuje słowa kluczowe przy użyciu TfidfVectorizer i AffinityPropagation.
  • Następnie przypisuje wartość liczbową do każdego klastra tematów.
  • Wyniki są następnie eksportowane do pliku csv.

Pobierz ten skrypt

 import csv import numpy as np from sklearn.cluster import AffinityPropagation from sklearn.feature_extraction.text import TfidfVectorizer # Read keywords from text file with open("keywords.txt", "r") as f: keywords = f.read().splitlines() # Create a Tf-idf representation of the keywords vectorizer = TfidfVectorizer() X = vectorizer.fit_transform(keywords) # Perform Affinity Propagation clustering af = AffinityPropagation().fit(X) cluster_centers_indices = af.cluster_centers_indices_ labels = af.labels_ # Get the number of clusters found n_clusters = len(cluster_centers_indices) # Write the clusters to a csv file with open("clusters.csv", "w", newline="") as f: writer = csv.writer(f) writer.writerow(["Cluster", "Keyword"]) for i in range(n_clusters): cluster_keywords = [keywords[j] for j in range(len(labels)) if labels[j] == i] if cluster_keywords: for keyword in cluster_keywords: writer.writerow([i, keyword]) else: writer.writerow([i, ""])

Skrypt 5: Dopasuj listę słów kluczowych do listy predefiniowanych tematów

Jest to podobne do poprzedniego skryptu, z tą różnicą, że umożliwia dopasowanie listy słów kluczowych do predefiniowanego zestawu tematów.

Jest to świetne rozwiązanie w przypadku dużych zestawów słów kluczowych, ponieważ przetwarza je w partiach po 1000, aby zapobiec awariom systemu.

Jak działa ten skrypt

  • Ten skrypt importuje listę słów kluczowych (keywords.txt) i listę tematów (topics.txt).
  • Następnie analizuje tematy i listy słów kluczowych i dopasowuje je do najbliższego dopasowania. Jeśli nie znajdzie dopasowania, klasyfikuje je jako inne.
  • Wyniki są następnie eksportowane do pliku CSV.

Pobierz ten skrypt

 import pandas as pd import spacy from spacy.lang.en.stop_words import STOP_WORDS # Load the Spacy English language model nlp = spacy.load("en_core_web_sm") # Define the batch size for keyword analysis BATCH_SIZE = 1000 # Load the keywords and topics files as Pandas dataframes keywords_df = pd.read_csv("keywords.txt", header=None, names=["keyword"]) topics_df = pd.read_csv("topics.txt", header=None, names=["topic"]) # Define a function to categorize a keyword based on the closest related topic def categorize_keyword(keyword): # Tokenize the keyword tokens = nlp(keyword.lower()) # Remove stop words and punctuation tokens = [token.text for token in tokens if not token.is_stop and not token.is_punct] # Find the topic that has the most token overlaps with the keyword max_overlap = 0 best_topic = "Other" for topic in topics_df["topic"]: topic_tokens = nlp(topic.lower()) topic_tokens = [token.text for token in topic_tokens if not token.is_stop and not token.is_punct] overlap = len(set(tokens).intersection(set(topic_tokens))) if overlap > max_overlap: max_overlap = overlap best_topic = topic return best_topic # Define a function to process a batch of keywords and return the results as a dataframe def process_keyword_batch(keyword_batch): results = [] for keyword in keyword_batch: category = categorize_keyword(keyword) results.append({"keyword": keyword, "category": category}) return pd.DataFrame(results) # Initialize an empty dataframe to hold the results results_df = pd.DataFrame(columns=["keyword", "category"]) # Process the keywords in batches for i in range(0, len(keywords_df), BATCH_SIZE): keyword_batch = keywords_df.iloc[i:i+BATCH_SIZE]["keyword"].tolist() batch_results_df = process_keyword_batch(keyword_batch) results_df = pd.concat([results_df, batch_results_df]) # Export the results to a CSV file results_df.to_csv("results.csv", index=False)

Praca z Pythonem dla SEO

Python to niezwykle potężne i wszechstronne narzędzie dla specjalistów SEO.

Niezależnie od tego, czy jesteś początkującym, czy doświadczonym praktykiem, darmowe skrypty, które udostępniłem w tym artykule, stanowią doskonały punkt wyjścia do odkrywania możliwości Pythona w SEO.

Dzięki intuicyjnej składni i szerokiej gamie bibliotek Python może pomóc zautomatyzować żmudne zadania, analizować złożone dane i uzyskać nowy wgląd w wydajność witryny. Dlaczego więc nie spróbować?

Powodzenia i szczęśliwego kodowania!


Opinie wyrażone w tym artykule są opiniami autora-gościa i niekoniecznie Search Engine Land. Autorzy personelu są wymienieni tutaj.