본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 23. 14:17

문헌 검토를 위한 Google Scholar 스크래핑 (Python + Apify, 2026)

요약

Google Scholar의 강력한 봇 탐지를 우회하여 문헌 검토를 자동화하는 Python 및 Apify 기반 스크래핑 가이드를 소개합니다. 논문 데이터의 중복 제거, 인용 횟수 변동성, 연구 재현성 확보를 위한 아키텍처 설계 방안을 다룹니다.

핵심 포인트

  • Google Scholar의 강력한 안티 스크래핑 기술 대응 필요
  • 공식 API 부재로 인한 Apify 등 외부 도구 활용 권장
  • 프리프린트와 저널 버전 간의 중복 제거 및 데이터 통합 이슈
  • 연구 재현성을 위한 쿼리 이력 기록 및 데이터 스냅샷 저장

모든 대학원생은 문헌 검토 (lit review)를 시작한 지 3주 차쯤 되면 벽에 부딪힙니다. 400개의 탭이 열려 있고, 그중 60%는 중복이며, Zotero는 또다시 충돌했습니다. 검색, 훑어보기, 인용, 반복으로 이어지는 수동 워크플로우 (manual workflow)는 LLM이 논문 출력을 10배로 늘리기 전부터 이미 망가져 있었습니다. 매년 Scholar에 약 500만 개의 새로운 논문이 색인되는 2026년에는, 자동화하지 않는 모든 것이 당신의 정신 건강을 적극적으로 갉아먹고 있습니다.

이 문제에 실제 수치를 대입해 보면 다음과 같습니다: 2025년 STM 보고서는 해당 연도에 47,000개 이상의 저널을 통해 330만 편의 피어 리뷰 (peer-reviewed) 논문이 출판되었으며, 이는 전년 대비 7.2% 증가한 수치라고 추정했습니다. ArXiv 한 곳에서만 2026년 1월에 23,400개의 새로운 제출 건수를 기록했는데, 이는 2022년의 월간 약 15,000건에서 증가한 수치입니다. National Institutes of Health PubMed Central는 2025년에 170만 개의 레코드를 추가했습니다.

  1. 공격적인 봇 탐지 (Aggressive bot detection). Scholar의 안티 스크래핑 (anti-scraping) 기술은 Cloudflare Enterprise와 경쟁할 수준입니다. 직접적인 Python requests 루프를 사용하면 5~15개의 쿼리 후에 차단됩니다.
  2. 공식 API 부재 (No public API). PubMed와 달리 Scholar는 공식 API가 없습니다. Semantic Scholar가 부분적인 대안이 될 수 있지만, 일부 롱테일 (long-tail) 논문들이 누락됩니다.
  3. 모호한 중복 제거 (Ambiguous deduplication). 동일한 논문이 ArXiv의 프리프린트 (preprint), 컨퍼런스 버전, 저널 버전 등 세 가지 방식으로 나타날 수 있습니다. 이를 올바르게 통합하는 것은 쉽지 않은 작업입니다.
  4. 인용 횟수 변동 (Citation counts drift). 인용 횟수는 매일 업데이트되므로, 파이프라인 (pipelines)은 멱등성 (idempotent)을 유지해야 하며 스냅샷 (snapshots)을 저장해야 합니다.

이 모든 문제 외에도, 연구 무결성 표준 (예: PRISMA 2020)은 재현 가능한 검색 쿼리와 문서화된 제외 수치를 요구합니다. 따라서 스크래퍼 (scraper)는 쿼리 이력을 반드시 기록해야 합니다.

  1. 프리프린트 vs. 출판물 귀속 (Preprint vs. published attribution). 동일한 논문이 서로 다른 DOI와 인용 횟수를 가진 채 세 번 (ArXiv 프리프린트, 컨퍼런스 프로시딩 (conference proceedings), 저널 출판물) 인덱싱될 수 있습니다. Scholar는 때때로 이를 "[PDF] from..." 링크로 통합하기도 하지만, 그렇지 않을 때도 있습니다.
  2. 교차 언어 커버리지 (Cross-language coverage). Scholar는 비영어권 논문도 인덱싱하지만, 중국어, 일본어, 포르투갈어 문헌에 대한 커버리지는 불균형합니다. 의학이나 공학 분야의 체계적 문헌 고찰 (systematic reviews)에서 이러한 코퍼스 (corpora)를 제외하는 것은 실제적인 편향 (bias)의 원인이 됩니다.

아키텍처 (The architecture)


    [Query strings + filters]
              |
...

1단계: Scholar 검색

google-scholar-scraper는 Scholar의 봇 탐지를 처리하며, 인용 횟수와 저자 h-index 데이터가 포함된 구조화된 논문 데이터를 반환합니다.


    from apify_client import ApifyClient

...

각 논문 데이터:


    {
      "title": "Evaluating Hallucinations in LLMs: A Meta-Analysis",
...

2단계: ArXiv 전문 가져오기

많은 Scholar 검색 결과는 유료 결제 장벽(paywalls) 뒤에 숨겨져 있습니다. 만약 논문에 ArXiv 프리프린트(preprint)가 있다면, arxiv-scraper를 사용하여 전문 PDF 링크와 구조화된 초록(structured abstract)을 가져오세요.

    arxiv_ids = [extract_arxiv_id(p["doi"]) for p in papers if "arxiv" in p.get("doi","").lower()]

...

3단계: 소스 간 중복 제거 (Deduplicate across sources)

Scholar와 ArXiv는 내용이 많이 겹칩니다. 먼저 DOI를 기준으로 중복을 제거하고, 그다음 제목 유사도(title similarity)를 활용하여 보완하세요:

    from rapidfuzz import fuzz

...

4단계: 인용 그래프 구축 (Build a citation graph)

스노볼 샘플링(snowball sampling) — 즉, 시드 세트(seed set)를 인용하거나 시드 세트에 의해 인용된 논문을 찾는 작업 — 을 위해, 인용 횟수가 높은 앵커 논문(anchor papers)으로부터 순방향 및 역방향 탐색을 수행하세요. 스크래퍼의 include_citations 플래그를 사용하면 Scholar의 "인용됨(Cited by)" 링크를 반환합니다.

DuckDB로 로드하기:

    import duckdb
    con = duckdb.connect("lit_review.duckdb")
...

그 다음 질문을 던지세요:

    -- 코퍼스(corpus) 내 최다 인용 논문
    SELECT title, year, citations FROM papers ORDER BY citations DESC LIMIT 20;
...

5단계: PRISMA 준수 CSV로 내보내기 (Export a PRISMA-compliant CSV)

체계적 문헌 검토(Systematic reviews)에는 문서화된 포함/제외(inclusion/exclusion) 수치가 필요합니다. 다음을 내보내세요:

    import csv
    with open("prisma.csv", "w") as f:
...

이제 포함/제외 기준을 수동으로(또는 LLM 스크리닝 단계를 통해) 채우면, PRISMA 기준에 부합하는 감사 추적(audit trail)을 확보할 수 있습니다.

6단계: LLM 분류 (Triage) (선택 사항이지만 혁신적인 방법)

만약 800편의 논문을 수집했는데 현실적으로 50편만 필요하다면, LLM 스크리닝 단계를 통해 훑어보는 데 드는 일주일의 시간을 아낄 수 있습니다. 패턴은 다음과 같습니다: 각 논문의 제목과 초록을 엄격한 포함 기준을 가진 소형 모델(small model)에 입력하여 yes/no/maybe 응답을 받고, 사람은 'maybe'로 분류된 것들만 검토하는 방식입니다. 이는 Cochrane 스타일의 검토에서 사용되는 것과 동일한 패턴입니다.

    import os, json
    from openai import OpenAI
...

Journal of Medical Internet Research에 발표된 2025년 연구에 따르면, '불확실(maybe)' 항목에 대해 인간이 검토하는 LLM(대규모 언어 모델) 보조 스크리닝 방식은 Cochrane 리뷰(Cochrane review)의 완전 수동 방식과 96%의 일치도(concordance)를 달성하는 동시에 스크리닝 소요 시간을 73% 단축했습니다. 핵심은 '불확실(maybe)' 카테고리입니다. 모델이 확신을 가지고 제외하도록 신뢰하는 것이 아니라, 사전 필터링(pre-filter)을 수행하고 불확실성을 표시(flag)하도록 하는 것입니다.

활용 사례 (Use cases)

1. 박사 과정 문헌 검토 (PhD lit review). 계산 생물학(computational biology) 전공 학생이 30개의 쿼리에 대해 매일 밤 Scholar + ArXiv를 실행합니다. 아침에 일어나면 중복 제거(deduped)가 완료되고 인용 속도(citation velocity)에 따라 순위가 매겨진 200개의 새로운 논문이 매주 준비되어 있습니다.

2. 특허 지형 분석 (Patent landscape analysis). 바이오테크 분석가가 include_patents=True 플래그를 사용하여 CRISPR 및 유전자 치료(gene therapy)에 관한 논문과 특허를 모두 가져와 지식재산권(IP) 중첩 사례를 찾아냅니다.

3. 연구비 지원 신청서 작성 (Grant writing). 연구 책임자(PI)가 NIH R01을 위한 "핵심 참고 문헌"이 필요합니다. 각 목표(aim)별로 최신순 상위 20개 논문을 10분 만에 자동화하여 추출합니다.

4. 연구 트렌드 예측 (Research trend forecasting). VC(벤처 캐피털) 분석가가 주제별 연간 논문 수를 집계하여, 특정 분야가 트렌드가 되기 12~18개월 전에 신흥 하위 분야(subfields)를 식별합니다.

5. 경쟁 연구실 모니터링 (Competitor-lab monitoring). 제약 R&D 팀이 12개의 경쟁 연구 그룹의 출판물 성과를 추적합니다. 저자별 주간 Scholar 쿼리를 통해 새로운 논문을 찾아내고, LLM 요약(summarization) 과정을 거쳐 이를 월요일 브리핑용 1페이지 보고서로 압축합니다. 이 팀은 경쟁사의 방법론 전환(methodology pivot)을 업계 언론에 보도되기 약 4개월 전에 포착했다고 보고했습니다.

6. 최신 강의 계획서 작성 (Teaching updated syllabi). 대학교수가 매 학기 대학원 세미나를 위한 읽기 목록을 자동으로 갱신합니다. 파이프라인은 지난 18개월 동안 강의 주제와 일치하는 가장 많이 인용된 논문 상위 30개를 가져옵니다. 학생들은 2019년에 마지막으로 업데이트된 목록 대신 최신 읽기 목록을 받게 됩니다.

가격 비교 (Pricing comparison)

서비스논문 1만 건당 비용전문 (Full text)?인용 그래프 (Citation graph)?
Scopus API기관 전용 (Institutional only)부분적 (Partial)예 (Yes)
Web of Science사용자당 연간 $300-1000부분적 (Partial)예 (Yes)
Semantic Scholar API무료 (속도 제한 있음)초록 (Abstract)예 (Yes)
scholarly (Python)무료 (빠를 경우 차단됨)아니요 (No)제한적 (Limited)
Apify actors~$15예 (ArXiv)예 (Yes)

학술 기관 로그인 정보가 없는 사용자에게 Apify는 구조화된 Scholar 데이터를 얻을 수 있는 가장 경제적인 경로입니다.

일반적인 함정 (Common pitfalls)

다음은 유망했던 파이프라인을 일주일간의 디버깅 지옥으로 만들어버리는 실패 사례들입니다:

  • 자체적인 속도 제한 (Rate-limit yourself). Actor의 프록시 회전 (proxy rotation) 기능을 사용하더라도, max_results_per_query를 합리적으로 설정하세요. 500개는 괜찮지만, 5000개는 속도가 느려질 뿐만 아니라 Scholar의 딥 페이지네이션 (deep-pagination) 한계치에 도달하게 됩니다. 이 한계치에서는 100페이지 이후의 결과가 신뢰할 수 없게 됩니다.
  • 인용 횟수는 스냅샷 (Citation counts are snapshots)입니다. 추이를 파악하는 것이 중요하다면 매주 다시 실행하세요. 1월에 인용 횟수가 5회였던 논문이 인기를 얻는다면 6월에는 200회가 될 수도 있습니다. 여러분이 실제로 원하는 신호는 절대적인 수치가 아니라 바로 그 속도 (velocity)인 경우가 많습니다.
  • 저자 식별 (Author disambiguation). Scholar는 이름이 같은 저자들을 하나로 합쳐버립니다.

의학 또는 생물 의학 (biomedical) 검토를 수행하는 경우 Retraction Watch의 데이터베이스와 교차 검증하십시오. 근거로 인용된 철회된 논문은 논문을 아예 찾지 못한 것보다 더 나쁜 상황을 초래합니다.

  • 메타데이터의 연도 불일치 (Year drift in metadata). 한쪽은 "제출(submitted)"을 기준으로 하고 다른 쪽은 "출판(published)"을 기준으로 하기 때문에, Scholar에는 year: 2024로 되어 있고 CrossRef에는 year: 2025로 되어 있을 수 있습니다. 여러 소스에서 중복을 제거할 때는 Scholar의 휴리스틱(heuristic) 연도보다 CrossRef의 DOI로 확인된 연도를 신뢰하십시오.
  • PDF URL의 최신성 (PDF URL freshness). Scholar는 PDF 링크를 캐싱합니다. 많은 링크가 저자의 개인 홈페이지를 가리키고 있는데, 이는 1년 뒤에 404 오류를 일으키기 일쑤입니다. 아카이브 접근 권한이 필요한 경우, 나중에 URL에 의존하지 말고 스크래핑 시점에 PDF를 가져와 자체 버킷(bucket)에 저장하십시오.
  • Scholar의 "sciting" vs. "citing". 인용(Citations)은 긍정적일 수도 있고 부정적일 수도 있습니다. 메타 분석 (meta-analysis)을 수행할 때는 Scholar 데이터 위에 scite.ai의 시그널 레이어 (signal layer)를 사용하여 지지하는 인용과 반박하는 인용의 가중치를 조절하는 것을 고려하십시오.

NexGenData가 이를 처리하는 방식

Scholar를 안정적으로 스크래핑하는 것은 누군가에게는 전업 업무와 같습니다. 저희는 이러한 작업을 흡수하기 위해 google-scholar-scraper 액터 (actor)를 구축했습니다.

안티 봇 강화 (Anti-bot hardening). 지리적 위치에 따라 주거용 프록시 (residential proxies)를 순환시키고, 실제와 유사한 브라우저 핑거프린트 (browser fingerprints)를 사용하며, Scholar의 순환되는 캡차 (captcha) 과제를 자동으로 처리합니다. 생으로 작성된 Python 스크립트보다 차단 없이 훨씬 더 많은 쿼리를 수행할 수 있습니다.

구조화된 저자 + 인용 출력 (Structured author + citation output). 액터는 저자를 단일 평면 문자열 (flat string)이 아닌, 가능한 경우 h-index를 포함한 별도의 객체로 반환합니다. 인용 횟수, 피인용 링크 (cited-by links), 관련 논문 링크 (related-papers links)가 모두 보존됩니다.

DOI 추출 및 정규화 (DOI extraction and normalization). Scholar는 DOI를 링크로, 때로는 스니펫 (snippets) 내에, 때로는 아예 포함하지 않는 등 일관성 없게 임베딩합니다. 액터는 이를 추출하고 정규화하여 DOI를 통한 중복 제거가 깔끔하게 작동하도록 합니다.

스냅샷 지원 (Snapshotting support). 모든 실행은 쿼리 핑거프린트 (query fingerprint)로 태그를 지정할 수 있으므로, PRISMA 심사를 위한 재현성 (reproducibility)이 내장되어 있습니다. 과거 실행의 정확한 입력을 언제든 다시 재생할 수 있습니다.

ArXiv actor와의 네이티브 페어링 (Native pairing). 두 actor는 DOI 관례를 공유하므로, 출력값을 병합하는 것은 간단한 DuckDB 조인 (join) 작업입니다. 임피던스 불일치 (impedance mismatch)가 없습니다.

결과당 과금 (Pay-per-result). 논문 10,000건의 비용은 약 15달러입니다. 연간 2만 달러 이상인 Scopus 기관 접속 비용과 비교하면, 대학 소속이 없는 독립 연구자나 팀에게는 명확한 선택지입니다.

결론 (Conclusion)

2026년의 문헌 검토 (literature review)는 읽기 문제가 아니라 정보 검색 (information-retrieval) 문제입니다. 수집, 중복 제거 (deduplication), 순위 지정 (ranking) 단계를 자동화한 다음, 여러분의 실제 두뇌 자원은 가장 어려운 부분, 즉 중요한 논문 30편을 읽는 데 집중하십시오.

시작을 위한 세 가지 actor:

자주 묻는 질문 (FAQ)

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0