인턴일기 - 13일(네이버 기사수집 DB정제, 저장코드 수정)
2025. 4. 20. 11:08ㆍ데이터분석 인턴일기
오늘의 업무
네이버 기사수집 코드 정정
이전에 만들어뒀던 네이버 기사수집코드를 수정 해야할 이유가 생겨서 진행하게 되었다.
1. URL 기준으로 기존 DB와 중복 제거 함수 추가
함수: get_existing_urls_from_db(keyword)
- DB에서 keyword에 해당하는 기사들의 link만 가져옴
- 결과를 set 형태로 반환
def get_existing_urls_from_db(keyword):
try:
query = f"""
SELECT link
FROM {cleaned_table_name}
WHERE keyword = %(keyword)s
"""
df = pd.read_sql_query(query, engine, params={'keyword': keyword})
return set(df['link'].tolist())
except SQLAlchemyError as e:
write_error_log(e, keyword)
raise
함수: remove_db_duplicates(df, existing_urls)
- 새로 수집한 기사 중 DB에 이미 있는 URL은 제거
def remove_db_duplicates(df, existing_urls):
before = len(df)
df = df[~df['link'].isin(existing_urls)].reset_index(drop=True)
removed = before - len(df)
return df, removed
2. 전체 수집 흐름 리팩터링
- 수집 → URL 중복 제거 → 본문 유사도 제거 → 부족하면 추가 수집
- 데이터 저장 전, 기사 없으면 강제로 실패 처리 추가
- 수집 및 저장 중간에 에러발생시 raise로 비정상 종료코드가 뜨도록 바꿔준다.
if cleaned_df.empty:
raise Exception(f"{keyword}에 대해 저장할 기사가 없습니다.")
3. 정상/비정상 종료 코드 관리 (sys.exit)
- try 성공 시: sys.exit(0)
- except 실패 시: sys.exit(1)
→ PowerShell에서는 $LASTEXITCODE 로, CMD에서는 echo %ERRORLEVEL%로 확인 가능
write_info_log(f'최종 저장된 기사 수 : {len(cleand_df)}')
sys.exit(0)
except Exception as e:
write_error_log(e, keyword, business_num)
sys.exit(1)
PowerShell 에서 오류 확인

PowerShell과 CMD 가 다르다는 것도 이번에 처음알았는데 궁금했던 부분이긴해서 정리해 보았다. 둘다 단순한 프로그램 실행은 가능한데 복잡한 시스템 자동화는 PowerShell로 가능하고 CMD보다 PowerShell 을 더 연습 하는 것이 좋을 것으로 보인다.
PowerShell vs CMD (명령 프롬프트)
구분 CMD (명령 프롬프트) PowerShell
| 나온 시기 | 1980년대 (도스 기반) | 2006년 (윈도우 서버용으로 개발) |
| 목적 | DOS 명령어 실행 / 간단한 시스템 관리 | 복잡한 시스템 관리 자동화 (스크립트용) |
| 명령어 스타일 | 간단한 텍스트 명령어 (copy, dir 등) | 객체 지향 명령어 (Get-Process 등) |
| 출력 | 그냥 텍스트 | 객체(Object) (속성 조작 가능) |
| 스크립트 작성 | 배치 파일 (.bat) | PowerShell 스크립트 (.ps1) |
| 기능 복잡성 | 간단함 | 매우 강력함 (리눅스 쉘처럼 사용 가능) |
| 사용성 | 쉬움, 빠름 | 초반엔 약간 복잡하지만 강력함 |
| 기본 파일 경로 구분자 | \ (백슬래시) | \ (기본은 같음) |
| 최신 지원 여부 | 유지보수만 (업데이트 거의 없음) | 지속적으로 발전 중 (PowerShell 7 등) |
'데이터분석 인턴일기' 카테고리의 다른 글
| 인턴일기 - 15일차(ISO인증원 정보 수기입력) (0) | 2025.04.20 |
|---|---|
| 인턴일기 - 14일차(수기로 크롤링하기, 통합크롤러 코드검토) (0) | 2025.04.20 |
| 인턴일기 - 12일차(웹데이터 수집, API호출, 데이터정제 및 가공, PostgreSQL저장, pg_dump, 쿼리,Fiddler) (0) | 2025.04.15 |
| 인턴일기 - 11일차(통합크롤러 문제해결) (0) | 2025.04.15 |
| 인턴일기 - 10일차(통합크롤러, 크롤링log, JS기반 웹페이지 크롤링) (0) | 2025.04.12 |