본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 06. 15. 13:07

topics.txt를 작성하기만 하면 끝. arXiv의 최신 논문을 PDF로 전달하는 도구를 만들었습니다

요약

arXiv의 최신 논문을 키워드 기반으로 수집하여 요약 PDF와 원본 PDF를 자동으로 저장하는 Python 도구 개발기입니다. arXiv API의 정렬 오류 문제를 웹 스크레이핑 방식으로 해결한 과정과 구현 방법을 다룹니다.

핵심 포인트

  • topics.txt에 키워드 입력만으로 논문 자동 수집 가능
  • arXiv API의 sortBy=submittedDate 오류를 스크레이핑으로 해결
  • requests와 BeautifulSoup을 활용한 데이터 추출 방식
  • Python 기반의 자동화 도구 제작 워크플로우 공유

arXiv를 정기적으로 순회하며, 관심 있는 토픽의 최신 논문을 요약 PDF로 정리하고 논문 본문도 자동으로 다운로드하는 도구를 만들었습니다. Claude(채팅 + Claude Code)와의 페어 프로그래밍(Pair Programming)으로 개발한 기록입니다.

무엇을 만들었나

topics.txt에 키워드를 적어두면, arXiv에서 각 토픽의 최신 논문을 가져와서 요약 PDF + 논문 PDF를 날짜별 폴더에 저장하는 Python 도구입니다.

# 1행 1토픽, #으로 시작하는 줄은 주석
Kondo effect
Green function condensed matter
...

실행은 1개 커맨드.

python fetch_papers.py --num 5

출력은 다음과 같습니다.

output/
20260316/
condensed_matter_survey_20260316.pdf # 요약 PDF
...

저는 물성 물리(Kondo effect, DMFT, Green function) 분야에서 사용하고 있지만, topics.txt를 바꿔 쓰면 머신러닝(Machine Learning)이나 양자 정보(Quantum Information) 등 arXiv에 있는 분야라면 무엇이든 추적할 수 있습니다.

arXiv API의 함정: sortBy=submittedDate가 작동하지 않는다

본론입니다. 당초에는 arXiv 공식 API로 구현했습니다. Python에는 공식 권장 패키지인 arxiv가 있으며, 문서대로 작성하면 작동합니다.

import arxiv
search = arxiv.Search(
query="cat:cond-mat AND Kondo",
...

그런데 돌아온 결과는 2003~2004년의 논문이었습니다. '투고일이 최신순'으로 지정했음에도 불구하고, 20년도 더 된 논문이 '최신'으로 돌아오는 것입니다.

시행착오의 모든 기록

시도한 방법결과
arxiv 패키지 + SortCriterion.SubmittedDate2003년 논문이 반환됨
쿼리에 submittedDate:[202401010000 TO *] 필터 적용HTTP 500
sortBy=lastUpdatedDate로 변경역시 오래된 논문이 혼재함
API 취득 후 Python 측에서 날짜 필터링모든 항목이 걸러져 0건
Semantic Scholar API로 전환HTTP 429 (Rate Limit)
arXiv 검색 페이지 스크레이핑 (Scraping)성공 ✅

sortBy=submittedDate는 내부 ID 기반의 정렬이 혼재되어 있는지, 실질적으로 기능하지 않았습니다. 날짜 범위 필터는 서버가 500 에러를 반환하므로 회피가 불가능했습니다.

해결책: 인간이 보고 있는 페이지를 그대로 가져오기

브라우저에서 https://arxiv.org/search/ 를 열면, 신착순 논문이 정확하게 표시됩니다. API를 신뢰할 수 없다면, 인간이 보고 있는 것과 동일한 페이지를 가져오면 됩니다.

ARXIV_SEARCH = "https://arxiv.org/search/"
params = {
"searchtype": "all",
...

requests + BeautifulSoup로 전환한 순간, 2026년 3월의 논문들이 줄지어 나타났습니다.

soup = BeautifulSoup(resp.text, "html.parser")
results = soup.find_all("li", class_="arxiv-result")
for item in results[:num]:
...

PDF 생성: weasyprint에서 막혀 pdfkit으로

HTML→PDF 변환은 처음에 weasyprint를 선택했지만, Windows에서는 GTK/Pango 런타임이 별도로 필요하여 도입이 복잡했습니다.

OSError: cannot load library 'libgobject-2.0-0': error 0x7e.

pdfkit + wkhtmltopdf로 전환했더니 간단히 작동했습니다. wkhtmltopdf 0.12.6 (with patched qt)는 Windows용 설치 프로그램이 있어, 도입이 사실상 더블 클릭만으로 끝납니다.

config = pdfkit.configuration(
    wkhtmltopdf=r"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe"
)
...

코드 구성

fetch_papers.py
├── FetchError / PdfError # 커스텀 예외 (Custom Exception)
├── load_topics() # topics.txt 읽기
...

예외 처리 (Exception Handling)는 에러 유형별로 원인을 전달할 수 있는 메시지를 출력하도록 구성했습니다.

try:
    resp = requests.get(ARXIV_SEARCH, params=params, headers=HEADERS, timeout=30)
    resp.raise_for_status()
...

이러한 견고화 작업과 주석 추가는 Claude Code에게 요청했습니다 (후술).

운용: 작업 스케줄러를 통한 월간 자동 실행

Windows의 작업 스케줄러(Task Scheduler)에 배치(Batch) 파일을 등록하여 한 달에 한 번 자동으로 실행하고 있습니다.

@echo off
cd /d C:\00_main\program\python\get_paper
call .venv\Scripts\activate.bat
...

월초에 PDF가 차곡차곡 쌓이기 때문에, 트렌드의 변화를 나중에 추적할 수 있습니다.

Claude Chat과 Claude Code의 역할 분담

이번 개발을 통해 확인한 분업의 형태입니다.

작업담당
설계 및 사양 결정Claude Chat
...

"2003년 논문이 반환된다"는 증상으로부터 원인을 분류하는 작업은 대화를 통한 시행착오를 거칠 수밖에 없었습니다. 반면, 동작하는 코드가 완성된 후의 마무리 작업은 Claude Code에게 사양을 명확히 전달하면 차분(diff) 형식으로 깔끔하게 작성해 줍니다.

실제로 체감하기로는, AI가 코드를 작성하는 속도가 빨라질수록, 인간 측의 "왜 동작하지 않는지를 이해하는 능력"의 중요성이 높아집니다. 구현은 맡길 수 있어도, 설계와 검증은 손에서 놓을 수 없습니다.

프리프린트(Preprint)와의 관계 맺기

arXiv는 동료 심사(Peer Review) 없이 투고할 수 있기 때문에 양질의 논문과 질 낮은 논문이 섞여 있습니다. 취득한 논문을 처음부터 믿기보다는 "낚시터"로 활용하는 것이 현실적이라고 생각합니다.

  • 요약(Summary) PDF를 훑어보며 관심 있는 제목을 골라낸다
  • 저자 그룹을 확인한다
  • 흥미로워 보이면 전문(Full-text)을 읽는다
  • 심사를 거친 버전이 저널(Journal)에 게재되면 본격적으로 파고든다

참고로, arXiv는 2026년 3월에 코넬 대학교(Cornell University)로부터의 독립을 발표했습니다. AI 관련 논문의 급증으로 투고 수가 2022년 대비 50% 증가했으며, 운영은 적자 상태라고 합니다. 프리프린트의 홍수는 앞으로 더욱 가속화될 것입니다. 자신의 관심사에 맞춘 자동 서베이(Survey) 도구를 하나쯤 가지고 있는 것은 그에 대비하는 좋은 방법이 될 것입니다.

요약

  • arXiv API의 sortBy=submittedDate는 고장 나 있음 (2026년 3월 기준) - 검색 페이지 스크레이핑(Scraping) + order=-announced_date_first가 확실함
  • Windows의 PDF 생성은 pdfkit + wkhtmltopdf가 편리함
  • AI 개발의 분업: 시행착오는 Chat, 마무리는 Claude Code

코드는 모두 리포지토리(Repository)에 있습니다. topics.txt를 수정하여 여러분의 분야에서도 사용해 보세요.

리포지토리: arxiv-paper-fetcher

Discussion

AI 자동 생성 콘텐츠

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

원문 바로가기
0

댓글

0