728x90
트러블 슈팅
1. Solved.ac API를 통한 태그별 문제 목록 수집
문제
- Solved.ac API 호출 시 한 번에 너무 많은 문제를 요청하거나, rate limit에 걸리는 경우가 있었음.
해결
- API 문서를 참고하여 pagination 적용 (page, size 파라미터 사용)
- https://solvedac.github.io/unofficial-documentation/#/
- sleep(1)을 넣어 요청 간 딜레이 설정
- X-RateLimit-Remaining 헤더를 참고하여 요청량 조절 가능하도록 로직 개선
2. 백준 각 문제 페이지 크롤링 (문제 설명, 입출력 등)
문제
- BeautifulSoup을 이용해 HTML 파싱 중 일부 문제 페이지에서 NoneType 오류 발생
→ 특정 문제는 설명이나 예시가 비어있거나 구조가 다른 경우 존재
해결
- soup.select_one() 사용 시 None 체크 후 .text 접근하도록 안전하게 처리
- try-except 구문으로 개별 문제 크롤링 실패 시 로그 남기고 건너뛰기
- 실패한 문제 번호는 별도로 리스트에 저장하여 나중에 재시도 가능하도록 구현
3. 문제 설명 중 HTML에 포함된 이미지 처리
문제
- 문제 설명에 포함된 <img> 태그가 상대경로(/problem/파일명.png)로 되어 있어
크롤링 결과에 이미지가 누락되거나 잘못 저장됨
해결
- 이미지 태그의 src 속성에 https://static.baekjoon.io를 붙여 절대 경로로 변환
for img_tag in soup.select("img"):
if img_tag.get("src") and img_tag["src"].startswith("/"):
img_tag["src"] = "https://static.baekjoon.io" + img_tag["src"]
4. 입출력 예제 파싱 오류
문제
- 일부 문제는 입출력 예제가 <pre>로 되어 있지 않고, <div class="input-output"> 형태로 되어 있어
기존 파싱 로직에서 누락됨
해결
- HTML 구조를 문제마다 확인한 뒤, 다양한 케이스를 포괄할 수 있도록 유연한 파싱 로직 구성
- <pre>, <div class="sample-input">, <div class="sample-output"> 모두 처리
5. 문제 번호, 티어, 제목 불일치 이슈
문제
- Solved.ac에서 받은 문제 목록의 문제 번호와 실제 크롤링한 문제 페이지의 데이터가 일치하지 않거나 누락되는 문제 발생
해결
- 문제 번호를 기반으로 JSON 키를 고정하고, 크롤링 결과가 없거나 누락되었을 경우 로그 출력
- JSON 및 엑셀 저장 전, problem_id 기준으로 검증하는 로직 추가
6. 출력 파일 정합성 (JSON, Excel)
문제
- 크롤링된 데이터가 JSON으로는 정상 저장되었으나, Excel 저장 시 줄바꿈이나 한글 인코딩 문제가 발생함
해결
- pandas로 Excel 저장 시 encoding='utf-8-sig' 설정
- to_excel() 사용 시 index=False, sheet_name 설정으로 가독성 확보
7. 태그별 데이터 저장 방식 개선
문제
- 태그별로 JSON/Excel을 각각 따로 저장하려는 로직에서 덮어쓰기 발생
해결
- 저장 경로를 data/tag_name/problems.json, problems.xlsx 형태로 구분
- 디렉토리가 없을 경우 os.makedirs(path, exist_ok=True)로 사전 생성
728x90
'카카오테크 부트캠프 > 프로젝트' 카테고리의 다른 글
데일리 스크럼 봇 생성기 (0) | 2025.05.13 |
---|---|
EC2에서 크롬 자동 로그인 이후 데이터 크롤링 트러블 슈팅 (0) | 2025.05.09 |
MYSQL 9.2 버전 선정한 근거 (0) | 2025.05.08 |
빅뱅 배포 도입 근거 (0) | 2025.04.29 |
클라우드 도입 근거 (0) | 2025.04.23 |