Google 검색 콘솔 백링크를 긁는 방법

7956 단어 gscprogrammingpython
웹마스터 또는 SEO 전문가라면 정기적으로 백링크 감사를 수행해야 할 것입니다. 악성 백링크를 찾아서 거부해야 하는 상황이 있습니다. 그러나 Google Search Console에서 모든 백링크 데이터를 수동으로 내보내고 연관시키는 것은 매우 어렵습니다.

작업 중인 웹사이트가 상당히 큰 경우 GSC에서 이 데이터를 가져오기 위해 많은 클릭과 내보내기가 수반될 것입니다. 이는 불가능합니다.



여기에서 Python, Beautiful Soup, Pandas가 등장합니다. GSC를 스크랩하고 필요한 데이터를 자동으로 가져올 수 있습니다.

먼저 첫 번째 것들:

pip를 사용하여 bs4, requests, re, pandas, csv 패키지를 설치합니다.

사용자 세션 에뮬레이션



백링크 정보를 위해 Google Search Console을 스크랩하려면 일반 사용자를 에뮬레이션해야 합니다. 선택한 브라우저로 이동하여 GSC에서 링크 섹션을 열고 상위 링크 사이트 섹션을 선택하면 됩니다. 여기에서 마우스 오른쪽 버튼을 클릭하고 검사를 눌러 페이지의 소스 코드를 검사해야 합니다.

개발 도구에서 네트워크 탭으로 이동하여 나타나는 첫 번째 URL을 선택하고 문서 유형이며 다음 유형의 URL에 대한 요청이어야 합니다. https://search.google.com/search-console/links?resource_id=sc-domain%3A{YourDomainName}

URL을 클릭하고 아래 이미지에 따라 요청 헤더 섹션의 헤더 섹션을 확인합니다.



일반 세션을 에뮬레이트하려면 요청 헤더에 표시되는 요청 정보를 Python 요청에 추가해야 합니다.

이 프로세스에 대한 몇 가지 참고 사항:

요청 헤더에도 쿠키 정보가 포함되어 있음을 알 수 있습니다. Python 측면에서 요청 라이브러리의 경우 이 정보는 쿠키라는 사전에 저장됩니다. 나머지 정보는 headers라는 사전에 저장됩니다.

실제로 우리가 하는 일은 헤더에서 정보를 가져와 아래의 코드에 따라 두 개의 사전으로 변환하는 것입니다.

*** [your-info]를 실제 데이터로 교체**

from bs4 import BeautifulSoup
import requests
import re
import pandas as pd
import csv

headers = {
    "authority": "search.google.com",
    "method":"GET",
    "path":'"[your-info]"',
    "scheme":"https",  
    "accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "accept-encoding":"gzip, deflate, br",
    "accept-language":"en-GB,en-US;q=0.9,en;q=0.8,ro;q=0.7",
    "cache-control":"no-cache",
    "pragma":"no-cache",
    "sec-ch-ua":"navigate",
    "sec-fetch-site":"same-origin",
    "sec-fetch-user":"?1",
    "upgrade-insecure-requests":"1",
    "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36",
    "x-client-data":"[your-info]",
    "sec-ch-ua":'" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"',
    "sec-ch-ua-mobile": "?0",
    "sec-fetch-dest": "document",
    "sec-fetch-mode": "navigate"
}
cookies = {
    "__Secure-1PAPISID":"[your-info]",
    "__Secure-1PSID":"[your-info]",
    "__Secure-3PAPISID":"[your-info]",
    "__Secure-3PSID":"[your-info]",
    "__Secure-3PSIDCC":"[your-info]",
    "1P_JAR":"[your-info]",
    "NID":"[your-info]",
    "APISID":"[your-info]",
    "CONSENT":"[your-info]",
    "HSID":"[your-info]",
    "SAPISID":"[your-info]",
    "SID":"[your-info]",
    "SIDCC":"[your-info]",
    "SSID":"[your-info]",
    "_ga":"[your-info]",
    "OTZ":"[your-info]",
    "OGPC":"[your-info]"
}


요청 헤더에 표시되는 정보는 경우에 따라 다를 수 있습니다. 두 개의 사전을 만들 수 있는 한 차이점에 대해 걱정하지 마십시오.

이 작업이 완료되면 실제 스크립트의 첫 번째 부분 작업을 시작할 때 헤더 및 쿠키 정보가 있는 셀을 실행하여 웹 사이트로 다시 연결되는 참조 도메인 목록을 수집합니다.

*** [your-domain]을 실제 도메인으로 교체**

genericURL = "https://search.google.com/search-console/links/drilldown?resource_id=[your-domain]&type=EXTERNAL&target=&domain="
req = requests.get(genericURL, headers=headers, cookies=cookies)
soup = BeautifulSoup(req.content, 'html.parser')


위의 URL은 사실상 상위 링크 사이트 섹션의 URL이므로 적절하게 업데이트하십시오.

다음 코드를 실행하여 로그인을 우회하고 있는지 테스트할 수 있습니다.

g_data = soup.find_all("div", {"class": "OOHai"})
for example in g_data:
    print(example)
    break


위 코드의 출력은 "00Hai"라는 클래스가 있는 div여야 합니다. 그런 것이 보이면 계속할 수 있습니다.

참조 도메인 목록 생성



이 프로세스의 다음 단계는 Python 및 Pandas를 활용하여 도메인을 가리키는 모든 참조 도메인이 포함된 목록을 반환하는 것입니다.

g_data = soup.find_all("div", {"class": "OOHai"})

dfdomains = pd.DataFrame()
finalList = []
for externalDomain in g_data:
    myList = []
    out = re.search(r'<div class="OOHai">(.*?(?=<))', str(externalDomain))
    if out:
        myList.append(out.group(1))
    finalList.append(myList) 
dfdomains = dfdomains.append(pd.DataFrame(finalList, columns=["External Domains"]))

domainsList = dfdomains["External Domains"].to_list()


위의 코드는 외부 도메인으로 채워질 빈 Pandas 데이터 프레임을 초기화합니다. 도메인은 전체 HTML을 통해 실행되고 "OOHai"클래스에 있는 모든 div를 식별하여 식별됩니다. 이러한 정보가 있는 경우 dfdomains dataFrame은 외부 도메인의 이름으로 채워집니다.

Domain별 Backlink 정보 추출**



다음으로 우리는 모든 도메인에 대한 백링크 정보, 이 페이지에 링크되는 상위 사이트 및 상위 링크 페이지(실제로 GSC의 3단계, 첫 번째 값만)를 추출합니다.

def extractBacklinks():
    for domain in domainsList[:]:
        url = f"https://search.google.com/search-console/links/drilldown?resource_id=[your-domain]&type=EXTERNAL&target={domain}&domain="

        request = requests.get(url, headers=headers, cookies=cookies)
        soup = BeautifulSoup(request.content, 'html.parser')

        for row in soup.find_all("div", {"class": "OOHai"}):          
            output = row.text
            stripped_output = output.replace("", "")

            domain_stripped = str(domain.split('https://')[1].split('/')[0])

            print ("---------")
            print ("Domain: " + domain)
            print ("---------")

            url_secondary = f"https://search.google.com/search-console/links/drilldown?resource_id=[your-domain]&type=EXTERNAL&target={domain}&domain={stripped_output}"
            request_secondary = requests.get(url_secondary, headers=headers, cookies=cookies)
            soup_secondary = BeautifulSoup(request_secondary.content, 'html.parser')
            for row in soup_secondary.find_all("div", {"class": "OOHai"}):
                output_last = row.text
                stripped_output_last = output_last.replace("", "")
                break

            with open(f"{domain_stripped}.csv", 'a') as file:
                writer = csv.writer(file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
                writer = writer.writerow([domain, stripped_output, stripped_output_last])
            file.close()

extractBacklinks()




Beautiful Soup이 이상한 문자를 반환하기 때문에 Python .replace 메서드를 사용하여 제거합니다.

모든 URL은 .csv 파일(스크립트가 있는 동일한 디렉터리에 있음)에 추가됩니다.

재미있게 보내세요!

좋은 웹페이지 즐겨찾기