SEO 작업 자동화를 위한 5가지 Python 스크립트
게시 됨: 2023-04-12Python은 지난 몇 년 동안 SEO 업계에서 인기를 얻은 강력한 프로그래밍 언어입니다.
상대적으로 간단한 구문, 효율적인 성능, 풍부한 라이브러리 및 프레임워크를 통해 Python은 많은 SEO가 업무에 접근하는 방식을 혁신적으로 변화시켰습니다.
Python은 최적화 프로세스를 더 빠르고 정확하며 효과적으로 만드는 데 도움이 되는 다양한 도구 세트를 제공합니다.
이 기사에서는 SEO 노력을 강화하는 데 도움이 되는 5가지 Python 스크립트를 살펴봅니다.
- 리디렉션 맵을 자동화합니다.
- 메타 설명을 대량으로 작성합니다.
- N-gram으로 키워드를 분석합니다.
- 키워드를 주제 클러스터로 그룹화합니다.
- 키워드 목록을 미리 정의된 주제 목록과 일치시킵니다.
파이썬을 시작하는 가장 쉬운 방법
Python 프로그래밍에 발을 담그고 싶다면 Google Colab을 고려해 볼 가치가 있습니다.
복잡한 로컬 설정 없이 Python 코드를 작성하고 실행할 수 있는 편리한 놀이터를 제공하는 무료 웹 기반 플랫폼입니다.
기본적으로 브라우저 내에서 Jupyter 노트북에 액세스할 수 있으며 데이터 과학 및 기계 학습을 위해 사전 설치된 라이브러리 호스트를 제공합니다.
또한 Google 드라이브를 기반으로 구축되어 작업을 쉽게 저장하고 다른 사람과 공유할 수 있습니다.
시작하려면 다음 단계를 따르세요.
파일 업로드 활성화
Google Colab을 열면 먼저 임시 파일 저장소를 만드는 기능을 활성화해야 합니다. 폴더 아이콘을 클릭하는 것만 큼 간단합니다.
이렇게 하면 임시 파일을 업로드한 다음 결과 파일을 다운로드할 수 있습니다.
소스 데이터 업로드
많은 Python 스크립트가 작동하려면 소스 파일이 필요합니다. 파일을 업로드하려면 업로드 버튼을 클릭하기만 하면 됩니다.
설정을 마치면 다음 Python 스크립트 테스트를 시작할 수 있습니다.
스크립트 1: 리디렉션 맵 자동화
대규모 사이트에 대한 리디렉션 맵을 만드는 작업은 엄청난 시간이 소요될 수 있습니다. 프로세스를 자동화하는 방법을 찾으면 시간을 절약하고 다른 작업에 집중할 수 있습니다.
이 스크립트의 작동 방식
이 스크립트는 밀접하게 일치하는 기사를 찾기 위해 웹 콘텐츠를 분석하는 데 중점을 둡니다.
- 첫째, URL의 두 TXT 파일을 가져옵니다. 하나는 리디렉션된 웹사이트(source_urls.txt)용이고 다른 하나는 리디렉션된 웹사이트(target_urls.txt)를 흡수하는 사이트용입니다.
- 그런 다음 Python 라이브러리 Beautiful Soup을 사용하여 웹 스크레이퍼를 만들어 페이지의 본문 내용을 가져옵니다. 이 스크립트는 머리글 및 바닥글 내용을 무시합니다.
- 모든 페이지의 콘텐츠를 크롤링한 후 Python 라이브러리 Polyfuzz를 사용하여 유사성 비율로 URL 간의 콘텐츠를 일치시킵니다.
- 마지막으로 유사성 백분율을 포함하여 결과를 CSV 파일로 인쇄합니다.
여기에서 유사성 비율이 낮은 URL을 수동으로 검토하여 다음으로 가장 일치하는 URL을 찾을 수 있습니다.
스크립트 받기
#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)
스크립트 2: 대량 메타 설명 작성
메타 설명은 직접적인 순위 요소는 아니지만 유기적 클릭률을 개선하는 데 도움이 됩니다. 메타 설명을 비워두면 Google에서 자체 설명을 만들 가능성이 높아집니다.
SEO 감사에서 메타 설명이 누락된 URL이 많이 표시되는 경우, 특히 전자상거래 웹사이트의 경우 모든 URL을 직접 작성하기 어려울 수 있습니다.
이 스크립트는 해당 프로세스를 자동화하여 시간을 절약하는 데 도움을 주기 위한 것입니다.
스크립트 작동 방식
- 먼저 스크립트는 TXT 파일(urls.txt)에서 URL 목록을 가져옵니다.
- 그런 다음 URL의 모든 콘텐츠를 구문 분석합니다.
- 콘텐츠가 구문 분석되면 155자 미만을 목표로 하는 메타 설명을 생성합니다.
- 결과를 CSV 파일로 내보냅니다.
스크립트 받기
!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)
스크립트 3: N-gram으로 키워드 분석
N-그램은 새로운 개념은 아니지만 여전히 SEO에 유용합니다. 대규모 키워드 데이터 집합에서 주제를 이해하는 데 도움이 될 수 있습니다.
이 스크립트의 작동 방식
이 스크립트는 키워드를 유니그램, 바이그램 및 트라이그램으로 구분하는 TXT 파일로 결과를 출력합니다.
- 먼저 모든 키워드(keyword.txt)의 TXT 파일을 가져옵니다.
- 그런 다음 Counter라는 Python 라이브러리를 사용하여 N-gram을 분석하고 추출합니다.
- 그런 다음 결과를 새 TXT 파일로 내보냅니다.
이 스크립트 가져오기
#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")
스크립트 4: 키워드를 주제 클러스터로 그룹화
새로운 SEO 프로젝트에서 키워드 연구는 항상 초기 단계에 있습니다. 때로는 데이터 세트에서 수천 개의 키워드를 처리하여 그룹화를 어렵게 만듭니다.
Python을 사용하면 키워드를 유사한 그룹으로 자동 클러스터링하여 추세 추세를 식별하고 키워드 매핑을 완료할 수 있습니다.
이 스크립트의 작동 방식
- 이 스크립트는 먼저 키워드의 TXT 파일(keywords.txt)을 가져옵니다.
- 그런 다음 스크립트는 TfidfVectorizer 및 AffinityPropagation을 사용하여 키워드를 분석합니다.
- 그런 다음 각 주제 클러스터에 숫자 값을 할당합니다.
- 그런 다음 결과를 csv 파일로 내보냅니다.
이 스크립트 가져오기
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, ""])
스크립트 5: 사전 정의된 주제 목록에 키워드 목록 일치
이것은 키워드 목록을 미리 정의된 주제 세트와 일치시킬 수 있다는 점을 제외하면 이전 스크립트와 유사합니다.
이는 시스템 충돌을 방지하기 위해 키워드를 1,000개 단위로 처리하기 때문에 대량의 키워드 집합에 적합합니다.
이 스크립트의 작동 방식
- 이 스크립트는 키워드 목록(keywords.txt)과 주제 목록(topics.txt)을 가져옵니다.
- 그런 다음 주제와 키워드 목록을 분석하고 가장 일치하는 항목과 일치시킵니다. 일치하는 항목을 찾지 못하면 기타로 분류합니다.
- 그런 다음 결과를 CSV 파일로 내보냅니다.
이 스크립트 가져오기
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)
SEO를 위한 Python 작업
Python은 SEO 전문가를 위한 매우 강력하고 다양한 도구입니다.
초보자이든 노련한 실무자이든 이 기사에서 공유한 무료 스크립트는 SEO에서 Python의 가능성을 탐색하기 위한 훌륭한 출발점을 제공합니다.
직관적인 구문과 방대한 라이브러리를 갖춘 Python은 지루한 작업을 자동화하고 복잡한 데이터를 분석하며 웹 사이트 성능에 대한 새로운 통찰력을 얻을 수 있도록 도와줍니다. 그러니 시도해 보지 않겠습니까?
행운을 빕니다. 즐거운 코딩하세요!
이 기사에 표현된 의견은 게스트 작성자의 의견이며 반드시 검색 엔진 랜드가 아닙니다. 교직원 저자는 여기에 나열됩니다.