5 scripturi Python pentru automatizarea sarcinilor SEO

Publicat: 2023-04-12

Python este un limbaj de programare puternic care a câștigat popularitate în industria SEO în ultimii ani.

Cu sintaxa sa relativ simplă, performanța eficientă și abundența de biblioteci și cadre, Python a revoluționat cât de mulți SEO își abordează munca.

Python oferă un set de instrumente versatil care poate ajuta procesul de optimizare să fie mai rapid, mai precis și mai eficient.

Acest articol explorează cinci scripturi Python pentru a vă ajuta să vă sporiți eforturile de SEO.

  • Automatizați o hartă de redirecționare.
  • Scrieți meta descrieri în bloc.
  • Analizați cuvintele cheie cu N-grame.
  • Grupați cuvintele cheie în grupuri de subiecte.
  • Potriviți lista de cuvinte cheie cu o listă de subiecte predefinite.

Cel mai simplu mod de a începe cu Python

Dacă doriți să vă înmuiați degetele în programarea Python, merită luat în considerare Google Colab.

Este o platformă gratuită, bazată pe web, care oferă un teren de joacă convenabil pentru scrierea și rularea codului Python fără a fi nevoie de o configurare locală complexă.

În esență, vă permite să accesați Jupyter Notebooks în browser și oferă o serie de biblioteci preinstalate pentru știința datelor și învățarea automată.

În plus, este construit pe Google Drive, astfel încât să poți salva cu ușurință și să-ți partajezi munca altora.

Pentru a începe, urmați acești pași:

Activați încărcarea fișierelor

După ce deschideți Google Colab, va trebui mai întâi să activați capacitatea de a crea un depozit temporar de fișiere. Este la fel de simplu ca să faci clic pe pictograma folderului.

Acest lucru vă permite să încărcați fișiere temporare și apoi să descărcați orice fișiere cu rezultate.

Dosar de acces

Încărcați datele sursă

Multe dintre scripturile noastre Python necesită un fișier sursă pentru a funcționa. Pentru a încărca un fișier, faceți clic pe butonul de încărcare.

Butonul de încărcare a fișierului

După ce ați terminat configurarea, puteți începe să testați următoarele scripturi Python.

Script 1: Automatizați o hartă de redirecționare

Crearea de hărți de redirecționare pentru site-uri mari poate fi incredibil de consumatoare de timp. Găsirea modalităților de automatizare a procesului ne poate ajuta să economisim timp și să ne concentrăm asupra altor sarcini.

Cum funcționează acest script

Acest script se concentrează pe analiza conținutului web pentru a găsi articole care se potrivesc strâns.

  • În primul rând, importă două fișiere TXT de adrese URL: unul este pentru site-ul web redirecționat (source_urls.txt), iar celălalt pentru site-ul care absoarbe site-ul redirecționat (target_urls.txt).
  • Apoi, folosim biblioteca Python Beautiful Soup pentru a crea un web scraper pentru a obține conținutul corpului principal de pe pagină. Acest script ignoră conținutul antetului și al subsolului.
  • După ce a accesat cu crawlere conținutul de pe toate paginile, folosește biblioteca Python Polyfuzz pentru a potrivi conținutul între adresele URL cu un procent de similaritate.
  • În cele din urmă, tipărește rezultatele într-un fișier CSV, inclusiv procentul de similaritate.

De aici, puteți examina manual orice adrese URL cu un procent de similitudine scăzut pentru a găsi următoarea potrivire cea mai apropiată.

Obțineți scenariul

 #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)

Script 2: scrieți meta descrieri în bloc

Deși metadescrierile nu sunt un factor direct de clasare, ele ne ajută să ne îmbunătățim ratele de clic organice. Lăsând meta descrierile goale crește șansele ca Google să-și creeze propriile descrieri.

Dacă auditul dvs. SEO arată că un număr mare de adrese URL lipsesc o meta-descriere, poate fi dificil să vă faceți timp pentru a le scrie pe toate manual, în special pentru site-urile de comerț electronic.

Acest script are scopul de a vă ajuta să economisiți timp prin automatizarea acestui proces pentru dvs.

Cum funcționează scenariul

  • Mai întâi, scriptul importă o listă de adrese URL dintr-un fișier TXT (urls.txt).
  • Apoi, analizează tot conținutul de pe adresele URL.
  • Odată ce conținutul este analizat, acesta creează meta descrieri care urmăresc să fie sub 155 de caractere.
  • Acesta exportă rezultatele într-un fișier CSV.

Obțineți scenariul

 !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)

Scriptul 3: Analizați cuvintele cheie cu N-grame

N-gramele nu sunt un concept nou, dar sunt încă utile pentru SEO. Ele ne pot ajuta să înțelegem temele din seturi mari de date despre cuvinte cheie.

N-grame

Cum funcționează acest script

Acest script dă rezultate într-un fișier TXT care împarte cuvintele cheie în unigrame, bigrame și trigrame.

  • În primul rând, importă un fișier TXT cu toate cuvintele cheie (keyword.txt).
  • Apoi folosește o bibliotecă Python numită Counter pentru a analiza și extrage N-gramele.
  • Apoi exportă rezultatele într-un nou fișier TXT.

Obțineți acest script

 #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")

Scriptul 4: Grupați cuvintele cheie în grupuri de subiecte

Cu noile proiecte SEO, cercetarea cuvintelor cheie este întotdeauna în stadiile incipiente. Uneori avem de-a face cu mii de cuvinte cheie dintr-un set de date, ceea ce face ca gruparea să fie dificilă.

Python ne permite să grupăm automat cuvintele cheie în grupuri similare pentru a identifica tendințele tendințelor și pentru a finaliza maparea cuvintelor cheie.

Cum funcționează acest script

  • Acest script importă mai întâi un fișier TXT de cuvinte cheie (keywords.txt).
  • Apoi, scriptul analizează cuvintele cheie folosind TfidfVectorizer și AffinityPropagation.
  • Apoi atribuie o valoare numerică fiecărui grup de subiecte.
  • Rezultatele sunt apoi exportate într-un fișier csv.

Obțineți acest script

 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, ""])

Scriptul 5: potriviți lista de cuvinte cheie cu o listă de subiecte predefinite

Acesta este similar cu scriptul anterior, cu excepția faptului că vă permite să potriviți o listă de cuvinte cheie cu un set predefinit de subiecte.

Acest lucru este excelent pentru seturi mari de cuvinte cheie, deoarece le procesează în loturi de 1.000 pentru a preveni blocarea sistemului.

Cum funcționează acest script

  • Acest script importă o listă de cuvinte cheie (keywords.txt) și o listă de subiecte (topics.txt).
  • Apoi analizează subiectele și listele de cuvinte cheie și le potrivește cu cea mai apropiată potrivire. Dacă nu găsește o potrivire, o clasifică ca alta.
  • Rezultatele sunt apoi exportate într-un fișier CSV.

Obțineți acest script

 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)

Lucrul cu Python pentru SEO

Python este un instrument incredibil de puternic și versatil pentru profesioniștii SEO.

Indiferent dacă sunteți un începător sau un practicant experimentat, scripturile gratuite pe care le-am împărtășit în acest articol oferă un punct de plecare excelent pentru a explora posibilitățile Python în SEO.

Cu sintaxa sa intuitivă și gama vastă de biblioteci, Python vă poate ajuta să automatizați sarcini obositoare, să analizați date complexe și să obțineți noi perspective asupra performanței site-ului dvs. Deci de ce să nu încerci?

Succes și codare fericită!


Opiniile exprimate în acest articol sunt cele ale autorului invitat și nu neapărat Search Engine Land. Autorii personalului sunt enumerați aici.