Jinwoo Hwang
개발로그를 어쩌다 보니 또 방치를 해버렸는데...고사기간만 끝나면 한 번 재개해 보겠습니다~ 문어발 식으로 사는 것의 폐해 중 하나 같네요ㅠㅠ
오늘은 졸업논문 때문에 잠시 시간 내서 짰던 간단한 Google Scholar 크롤러 코드 하나 던지고 가는 거로 퉁치려고 합니다 👀
사실 대단한 것도 아니고, 비슷한 거, 더 좋은 거 꽤 많지만 시간이 없는데 논문 리스트업 해두고 슥 볼 때 쓰고 싶은 분들이 또 있으실까 싶어서... (차주에 전 교수님 미팅이라 ㅎㅎ)
하나의 파일에 그냥 간단하게 짰고요, 크롬드라이버 위치 정도만 잘 확인해서 고쳐 써 주시면 될 것 같아요. 크롬드라이버 + 구글크롬 stable 버젼 설치 관해선 구글링하면 그래도 꽤 잘 나와 있으니 일단 생략할게요.
함수에 몇 페이지까지 크롤링하고 싶은지, 어떤 내용을 검색하고 싶은지 넣고 실행해 주시면 됩니다~ 셀레늄이 구글 크롬 창 띄우는 게 싫으시면 --headless 옵션 주석을 풀어주시면 안 보이게 돌아갑니다.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
import json
import time
def crawl(search_term: str, num_pages: int):
# Setting up Selenium WebDriver
options = webdriver.ChromeOptions()
options.add_argument("--disable-background-timer-throttling")
options.add_argument("--disable-backgrounding-occluded-windows")
options.add_argument("--disable-renderer-backgrounding")
# options.add_argument('--headless') # Uncomment to run headless
service = Service('/opt/homebrew/bin/chromedriver')
pagination_size = 10
result_dict = {}
for it in range(num_pages):
driver = webdriver.Chrome(service=service, options=options)
url = f'https://scholar.google.com/scholar?start={pagination_size * it}&q={search_term.replace(" ", "+")}&hl=ko&as_sdt=0,5'
driver.get(url)
WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.XPATH, '//h3/a[@href]')))
results = driver.find_elements(By.XPATH, '//h3/a[@href]')
for result in results:
print(result.text, result.get_attribute('href'))
result_dict[result.text] = result.get_attribute('href')
with open('results.json', 'w') as json_file:
json.dump(result_dict, json_file, indent=4)
driver.quit()
print("Data has been successfully saved to 'results.json'.")
if __name__ == '__main__':
crawl("parkinson's disease turn detection", 5)