이 글에서는 Python으로GoogleScholar에서 데이터를 스크래핑하는 방법을 단계별로 배웁니다. 스크래핑 단계로 들어가기 전에, 필수 조건과 환경 설정 방법을 살펴보겠습니다. 시작해 보겠습니다!
구글 학술 검색 수동 스크래핑의 대안
구글 학술 검색을 수동으로 스크래핑하는 것은 어렵고 시간이 많이 소요될 수 있습니다. 대안으로 Bright Data의 데이터 세트를 활용해 보세요:
- 데이터셋 마켓플레이스: 즉시 사용 가능한 사전 수집 데이터를 이용하세요.
- 맞춤형 데이터셋: 필요에 따라 맞춤형 데이터셋을 요청하거나 생성하세요.
Bright Data 서비스를 이용하면 수동 스크래핑의 복잡함 없이 시간을 절약하고 정확하며 최신 정보를 확보할 수 있습니다. 이제 계속해 보겠습니다!
필수 준비 사항
이 튜토리얼을 시작하기 전에 다음 항목을 설치해야 합니다:
- 최신 버전의Python
- Visual Studio Code와 같은 원하는 코드 편집기
또한 스크래핑 프로젝트를 시작하기 전에, 스크립트가 웹사이트의robots.txt파일을 준수하여 제한된 영역을 스크래핑하지 않도록 확인해야 합니다. 본 문서에서 사용된 코드는 학습 목적으로만 제공되며 책임감 있게 사용해야 합니다.
파이썬 가상 환경 설정
파이썬 가상 환경을 설정하기 전에 원하는 프로젝트 위치로 이동하여 google_scholar_scraper라는 새 폴더를 생성하세요:
mkdir google_scholar_scraper
cd google_scholar_scraper
google_scholar_scraper 폴더 생성 후 다음 명령어로 프로젝트용 가상 환경을 생성하세요:
python -m venv google_scholar_env
가상 환경을 활성화하려면 Linux/Mac에서 다음 명령어를 사용하세요:
source google_scholar_env/bin/activate
그러나 Windows 환경에서는 다음 명령어를 사용하세요:
.google_scholar_envScriptsactivate
필요한 패키지 설치
venv가활성화되면Beautiful Soup과pandas를 설치해야 합니다:
pip install beautifulsoup4 pandas
Beautiful Soup은 Google Scholar 페이지의 HTML 구조를 파싱하고 논문, 제목, 저자 등 특정 데이터 요소를 추출하는 데 도움이 됩니다. pandas는 추출한 데이터를 구조화된 형식으로 정리하고 CSV 파일로 저장합니다.
Beautiful Soup과 pandas 외에도Selenium을 설정해야 합니다. Google Scholar와 같은 웹사이트는 과부하를 방지하기 위해 자동화된 요청을 차단하는 조치를 자주 구현합니다. Selenium은 브라우저 동작을 자동화하고 사용자 행동을 모방함으로써 이러한 제한을 우회하는 데 도움이 됩니다.
다음 명령어를 사용하여 Selenium을 설치하세요:
pip install selenium
ChromeDriver를 다운로드할 필요가 없도록 Selenium의 최신 버전(작성 시점 기준 4.6.0)을 사용 중인지 확인하세요.
Google Scholar에 접근하기 위한 Python 스크립트 생성
환경이 활성화되고 필요한 라이브러리를 다운로드했다면 이제 Google Scholar 스크래핑을 시작할 차례입니다.
google_scholar_scraper 디렉터리에 gscholar_scraper. py라는 새 Python 파일을 생성한 후 필요한 라이브러리를 임포트하세요:
from bs4 import BeautifulSoup
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
다음으로, 브라우저 창을 열지 않고 데이터를 스크래핑할 수 있도록Selenium WebDriver를설정하여 Chrome 브라우저를 헤드리스 모드(즉, 그래픽 사용자 인터페이스 없이)로 제어할 것입니다. Selenium WebDriver를 초기화하기 위해 스크립트에 다음 함수를 추가하세요:
def init_selenium_driver():
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=chrome_options)
return driver
WebDriver를 초기화한 후에는 Selenium WebDriver를 사용하여 Google Scholar에 검색 쿼리를 전송하는 또 다른 함수를 스크립트에 추가해야 합니다:
def fetch_search_results(driver, query):
base_url = "https://scholar.google.com/scholar"
params = f"?q={query}"
driver.get(base_url + params)
driver.implicitly_wait(10) # 페이지 로드 완료까지 최대 10초 대기
# 페이지 소스(HTML 콘텐츠) 반환
return driver.page_source
이 코드에서 driver.get(base_url + params)는 Selenium WebDriver가 생성된 URL로 이동하도록 지시합니다. 또한 WebDriver가 페이지의 모든 요소가 로드될 때까지 최대 10초 동안 대기한 후 파싱하도록 설정합니다.
HTML 콘텐츠 파싱
검색 결과 페이지의 HTML 콘텐츠를 확보한 후에는 이를 파싱하고 필요한 정보를 추출하는 함수가 필요합니다.
기사 정보에 대한 올바른 CSS 선택자와 요소를 얻으려면 Google Scholar 페이지를 직접 확인해야 합니다. 브라우저의 개발자 도구를 사용하여 저자, 제목, 요약 요소(예: 다음 이미지와 같이 제목의 경우 gs_rt )에 대한 고유한 클래스나 ID를 찾으세요:

그런 다음 스크립트를 업데이트하세요:
def parse_results(html):
soup = BeautifulSoup(html, 'html.parser')
articles = []
for item in soup.select('.gs_ri'):
title = item.select_one('.gs_rt').text
authors = item.select_one('.gs_a').text
snippet = item.select_one('.gs_rs').text
articles.append({'title': title, 'authors': authors, 'snippet': snippet})
return articles
이 함수는 BeautifulSoup을 사용하여 HTML 구조를 탐색하고, 기사 정보를 포함하는 요소를 찾아 각 기사의 제목, 저자, 요약문을 추출한 후 이를 사전 목록으로 결합합니다.
업데이트된 스크립트에는 Google Scholar 페이지의 각 검색 결과 항목과 일치하는 CSS 선택자인 .select(.gs_ri)가 포함되어 있음을 알 수 있습니다. 그런 다음 코드는 더 구체적인 선택자(.gs_rt, .gs_a, .gs_rs)를 사용하여 각 결과의 제목, 저자 및 스니펫(간략한 설명)을 추출합니다.
스크립트 실행
스크래퍼 스크립트를 테스트하려면 다음 _main_ 코드를 추가하여 “machine learning” 검색을 실행하세요:
if __name__ == "__main__":
search_query = "machine learning"
# Selenium WebDriver 초기화
driver = init_selenium_driver()
try:
html_content = fetch_search_results(driver, search_query)
articles = parse_results(html_content)
df = pd.DataFrame(articles)
print(df.head())
finally:
driver.quit()
fetch_search_results 함수는 검색 결과 페이지의 HTML 콘텐츠를 추출합니다. 그런 다음 parse_results는 HTML 콘텐츠에서 데이터를 추출합니다.
전체 스크립트는 다음과 같습니다:
from bs4 import BeautifulSoup
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
def init_selenium_driver():
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=chrome_options)
return driver
def fetch_search_results(driver, query):
base_url = "https://scholar.google.com/scholar"
params = f"?q={query}"
# Selenium WebDriver를 사용하여 페이지 가져오기
driver.get((base_url + params)
# 페이지 로드 완료 대기
driver.implicitly_wait(10) # 페이지 로드 완료까지 최대 10초 대기
# 페이지 소스(HTML 콘텐츠) 반환
return driver.page_source
def parse_results(html):
soup = BeautifulSoup(html, 'html.parser')
articles = []
for item in soup.select('.gs_ri'):
title = item.select_one('.gs_rt').text
authors = item.select_one('.gs_a').text
snippet = item.select_one('.gs_rs').text
articles.append({'title': title, 'authors': authors, 'snippet': snippet})
return articles
if __name__ == "__main__":
search_query = "machine learning"
# Selenium WebDriver 초기화
driver = init_selenium_driver()
try:
html_content = fetch_search_results(driver, search_query)
articles = parse_results(html_content)
df = pd.DataFrame(articles)
print(df.head())
finally:
driver.quit()
파이썬 스크립트 실행: python gscholar_scraper.py 출력 예시: % python3 scrape_gscholar.py title authors snippet 0 [PDF][PDF] Machine learning algorithms-a review B Mahesh – International Journal of Science an…
% python3 scrape_gscholar.py
title authors snippet
0 [PDF][PDF] Machine learning algorithms-a review B Mahesh - International Journal of Science an... … Here‟sa quick look at some of the commonly u...
1 [BOOK][B] Machine learning E Alpaydin - 2021 - books.google.com MIT presents a concise primer on machine learn...
2 Machine learning: Trends, perspectives, and pr... MI Jordan, TM Mitchell - Science, 2015 - scien... … Machine learning addresses the question of h...
3 [BOOK][B] 머신 러닝이란 무엇인가? I El Naqa, MJ Murphy - 2015 - Springer … 머신 러닝 알고리즘은 계산적 접근법으로...
4 [BOOK][B] 머신 러닝
검색 쿼리를 매개변수로 설정하기
현재 검색 쿼리는 하드코딩되어 있습니다. 스크립트를 더 유연하게 만들기 위해서는 매개변수로 전달해야 합니다. 이렇게 하면 스크립트를 수정하지 않고도 검색어를 쉽게 변경할 수 있습니다.
스크립트에 전달된 명령줄 인자에 접근하려면 sys를 임포트하는 것으로 시작하세요:
import sys
그런 다음 __main__ 블록 스크립트를 업데이트하여 쿼리를 매개변수로 사용하도록 합니다:
if __name__ == "__main__":
if len(sys.argv) != 2:
print("사용법: python gscholar_scraper.py '<검색어>'")
sys.exit(1)
search_query = sys.argv[1]
# Selenium WebDriver 초기화
driver = init_selenium_driver()
try:
html_content = fetch_search_results(driver, search_query)
articles = parse_results(html_content)
df = pd.DataFrame(articles)
print(df.head())
finally:
driver.quit()
지정된 검색 쿼리와 함께 다음 명령을 실행하세요:
python gscholar_scraper.py <검색어>
이제 터미널을 통해 다양한 검색어(예: “인공 지능”, “에이전트 기반 모델링”, “감정 학습”)를 실행할 수 있습니다.
페이지 매김 활성화
일반적으로 Google Scholar는 페이지당 소수의 검색 결과(약 10개)만 표시하므로 충분하지 않을 수 있습니다. 더 많은 결과를 스크래핑하려면 여러 검색 페이지를 탐색해야 하며, 이는 추가 페이지를 요청하고 파싱하도록 스크립트를 수정해야 함을 의미합니다.
fetch_search_results 함수를 수정하여 가져올 페이지 수를 제어하는 start 매개변수를 포함시킬 수 있습니다. Google Scholar의 페이지네이션 시스템은 후속 페이지마다 이 매개변수를 10씩 증가시킵니다.
https://scholar.google.ca/scholar?start=10&q=machine+learning&hl=en&as_sdt=0,5 와 같은 일반적인 Google Scholar 페이지 링크의 첫 페이지를 살펴보면, URL의 start 매개 변수가 표시되는 결과 집합을 결정합니다. 예를 들어 start=0은 첫 페이지를, start=10은 두 번째 페이지를, start=20은 세 번째 페이지를 가져옵니다.
이를 처리하도록 스크립트를 업데이트해 보겠습니다:
def fetch_search_results(driver, query, start=0):
base_url = "https://scholar.google.com/scholar"
params = f"?q={query}&start={start}"
# Selenium WebDriver로 페이지 가져오기
driver.get(base_url + params)
# 페이지 로드 완료 대기
driver.implicitly_wait(10) # 페이지 로드 완료까지 최대 10초 대기
# 페이지 소스(HTML 콘텐츠) 반환
return driver.page_source
다음으로, 여러 페이지를 스크래핑하기 위한 함수를 생성해야 합니다:
def scrape_multiple_pages(driver, query, num_pages):
all_articles = []
for i in range(num_pages):
start = i * 10 # 각 페이지에는 10개의 결과가 포함됨
html_content = fetch_search_results(driver, query, start=start)
articles = parse_results(html_content)
all_articles.extend(articles)
return all_articles
이 함수는 지정된 페이지 수(num_pages)만큼 반복하여 각 페이지의 HTML 콘텐츠를 파싱하고, 모든 기사를 단일 리스트에 수집합니다.
메인 스크립트를 업데이트하여 새 함수를 사용하도록 하는 것을 잊지 마세요:
if __name__ == "__main__":
if len(sys.argv) < 2 or len(sys.argv) > 3:
print("사용법: python gscholar_scraper.py '<검색어>' [<페이지 수>]")
sys.exit(1)
search_query = sys.argv[1]
num_pages = int(sys.argv[2]) if len(sys.argv) == 3 else 1
# Selenium WebDriver 초기화
driver = init_selenium_driver()
try:
all_articles = scrape_multiple_pages(driver, search_query, num_pages)
df = pd.DataFrame(all_articles)
df.to_csv('results.csv', index=False)
finally:
driver.quit()
이 스크립트에는 모든 집계 데이터를 저장하고 터미널에 출력만 하지 않도록 하는 줄(df.to_csv('results.csv', index=False))도 포함되어 있습니다.
이제 스크립트를 실행하고 스크랩할 페이지 수를 지정하세요:
python gscholar_scraper.py "understanding elearning patterns" 2
출력 결과는 다음과 같아야 합니다:

IP 차단 방지 방법
대부분의 웹사이트는 스크래핑을 방지하기 위해 자동화된 요청 패턴을 감지하는 봇 방지 조치를 갖추고 있습니다. 웹사이트가 비정상적인 활동을 감지하면 IP가 차단될 수 있습니다.
예를 들어, 이 스크립트를 작성하는 과정에서 응답이 빈 데이터만 반환된 적이 있습니다:
빈 데이터프레임
열: []
인덱스: []
이 경우, 귀하의 IP가 이미 차단되었을 수 있습니다. 이 시나리오에서는 IP가 표시되지 않도록 우회 방법을 찾아야 합니다. 다음은 IP 차단을 피하는 데 도움이 되는 몇 가지 기술입니다.
프록시 사용
프록시 서비스는 여러 IP 주소로 요청을 분산시켜 차단 가능성을 줄여줍니다. 예를 들어, 프록시를 통해 요청을 전달하면 프록시 서버가 요청을 웹사이트로 직접 라우팅합니다. 이렇게 하면 웹사이트는 사용자의 실제 IP 주소가 아닌 프록시 서버의 IP 주소로만 요청을 인식합니다. 프로젝트에 프록시를 구현하는 방법을 알고 싶다면 이 글을 참고하세요.
IP 회전
IP 차단 회피를 위한 또 다른 방법은 특정 요청 횟수 후 스크립트가 IP 주소를 회전하도록 설정하는 것입니다. 수동으로 수행하거나자동으로 IP를 회전하는 프록시 서비스를 이용할 수 있습니다. 이렇게 하면 요청이 서로 다른 사용자로부터 온 것처럼 보이므로 웹사이트가 사용자의 IP를 탐지하고 차단하기 어렵습니다.
가상 사설망(VPN) 활용
가상 사설망(VPN)은 인터넷 트래픽을 다른 지역에 위치한 서버를 통해 라우팅하여 IP 주소를 숨깁니다. 여러 국가에 서버를 둔 VPN을 설정하면 다양한 지역에서 트래픽이 발생하는 것처럼 시뮬레이션할 수 있습니다. 또한 실제 IP 주소를 숨겨 웹사이트가 IP를 기반으로 사용자의 활동을 추적하거나 차단하기 어렵게 만듭니다.
결론
이 글에서는 Python을 사용해 Google Scholar에서 데이터를 스크래핑하는 방법을 살펴보았습니다. 가상 환경을 설정하고 Beautiful Soup, pandas, Selenium과 같은 필수 패키지를 설치한 후, 검색 결과를 가져오고 파싱하는 스크립트를 작성했습니다. 또한 페이지네이션을 구현하여 여러 페이지를 스크래핑하고, 프록시 사용, IP 회전, VPN 활용과 같은 IP 차단 회피 기법에 대해서도 논의했습니다.
수동 스크래핑도 성공할 수 있지만, IP 차단이나 지속적인 스크립트 유지 관리 같은 문제가 자주 발생합니다. 데이터 수집 작업을 간소화하고 향상시키려면 Bright Data의 솔루션을 활용하는 것을 고려해 보세요. 당사의 주거용 프록시 네트워크는 높은 익명성과 안정성을 제공하여 스크래핑 작업이 중단 없이 원활하게 진행되도록 보장합니다. 또한 당사의 웹 스크래퍼 API는 IP 회전과 CAPTCHA 해결을 자동으로 처리하여 시간과 노력을 절약해 줍니다. 즉시 사용 가능한 데이터를 원하신다면 다양한 요구에 맞춰 설계된 당사의 방대한 데이터셋을 살펴보세요.
데이터 수집을 한 단계 업그레이드하세요—지금 바로Bright Data의 무료 체험판에 가입하여 프로젝트에 효율적이고 신뢰할 수 있는 스크래핑 솔루션을 경험해 보십시오.