인턴일기 - 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 에서 오류 확인

LASTEXITCODE1 출력확인

 

PowerShell과 CMD 가 다르다는 것도 이번에 처음알았는데 궁금했던 부분이긴해서 정리해 보았다. 둘다 단순한 프로그램 실행은 가능한데 복잡한 시스템 자동화는 PowerShell로 가능하고 CMD보다 PowerShell 을 더 연습 하는 것이 좋을 것으로 보인다.

PowerShell vs CMD (명령 프롬프트)

구분                                      CMD (명령 프롬프트)                                         PowerShell
나온 시기 1980년대 (도스 기반) 2006년 (윈도우 서버용으로 개발)
목적 DOS 명령어 실행 / 간단한 시스템 관리 복잡한 시스템 관리 자동화 (스크립트용)
명령어 스타일 간단한 텍스트 명령어 (copy, dir 등) 객체 지향 명령어 (Get-Process 등)
출력 그냥 텍스트 객체(Object) (속성 조작 가능)
스크립트 작성 배치 파일 (.bat) PowerShell 스크립트 (.ps1)
기능 복잡성 간단함 매우 강력함 (리눅스 쉘처럼 사용 가능)
사용성 쉬움, 빠름 초반엔 약간 복잡하지만 강력함
기본 파일 경로 구분자 \ (백슬래시) \ (기본은 같음)
최신 지원 여부 유지보수만 (업데이트 거의 없음) 지속적으로 발전 중 (PowerShell 7 등)