본문 바로가기
코드리뷰/chatGPT(Python)코드

뉴스 기사 추출하는 코드 만들어 줄래? 3탄 docker 결과 파일 가져오기

by 디마드 2024. 12. 28.
반응형

지난 포스팅에 뉴스기사 크롤링 소스를 도커에 올려서 실행해 보았다. 한 걸음 더 나아가서 도커 컨테이너가 생성한 크롤링 결과 파일을 확인하고 로컬에 옮겨보자. 크롤링 및 도커 기본 지식이 필요하면 이전 포스팅을 참고하자. 

2024.12.27 - [코드리뷰/chatGPT(Python)코드] - 뉴스 기사 추출하는 코드 만들어 줄래? 1탄 (Chatgpt / Claude)

 

뉴스 기사 추출하는 코드 만들어 줄래? 1탄 (Chatgpt / Claude)

네이버 최신 뉴스 헤드라인을 추출해 보자. 일반적으로 웹 데이터를 추출하는 것을 웹크롤링이라 한다. 주로 파이썬을 이용해 웹 페이지 분석 후 필요한 데이터를 가져오는 코드를 작성하는데,

iamgus.tistory.com

2024.12.27 - [분류 전체보기] - 뉴스 기사 추출하는 코드 만들어 줄래? 2탄 docker 올려보자

 

뉴스 기사 추출하는 코드 만들어 줄래? 2탄 docker 올려보자

지난 시간에 인공지능에 지시해 만든 웹 크롤링 프로그램을 docker로 배포해 보자. 2024.12.27 - [코드리뷰/chatGPT(Python)코드] - 뉴스 기사 추출하는 코드 만들어 줄래? (Chatgpt / Claude) 뉴스 기사 추출하

iamgus.tistory.com

1. 하려고 하는 것

  • 뉴스기사 수집한 결과 파일을 로컬에 복사한다. 
  • docker가 생성한 컨테이너 내부에 들어가 보자. 
  • docker 컨테이너에 로컬 디렉토리를 마운트 시키자.
  • 표준시간대를 한국시간으로 설정하자. 

2. Actions

(1) 뉴스기사 수집 결과 파일 가져오기 (컨테이너 --> 로컬 pc)

2가지 방법이 있다. 하나는 컨테이너에 들어가서 로컬로 카피하는 방법과 처음부터 로컬 디렉터리를 마운트 시키는 방법이다.  전자를 위해서는 약간의 작업이 필요하다. 뉴스기사 크롤링이 끝나면 프로세스가 종료된다. 그러면 컨테이너도 함께 정지하기 때문에 내부에 접속할 수 없다. 그래서 news소스를 수정한다. 

if __name__ == "__main__":
    while True:  # 무한 루프
        try:
            headlines_df = get_naver_news_headlines()
            
            ...
            ...
            # 다음 크롤링까지 대기 (예: 1시간)
            time.sleep(3600)  # 3600초 = 1시간
            
        except Exception as e:
            print(f"에러 발생: {e}")
            time.sleep(300)  # 에러 발생시 5분 대기 후 재시도

 dockerfile에 컨테이너에 디렉토리가 생성될 수 있도록 코드를 추가한다. 

# output 디렉토리 생성
RUN mkdir -p /app/output && chmod 777 /app/output

docker 이미지를 만든다.  

  > docker build -t news .

docker 컨테이너를 실행한다. 

  > docker run --name news-container news

실행 중인 컨테이너 확인하자. 

> docker ps

컨테이너에 접속해 output 파일 조회하자

> docker exec -it news-container bash 

> ls output

로컬 pc에 카피하자

 > docker cp  news-container:/app/output ./output 

컨테이너를 종료한다.

 > docker stop news-container

(2) 뉴스기사 수집 결과 파일 마운트 시키기 

컨테이너가 구동될 때 로컬 디렉터리를 마운트 시키는 방법이다. 컨테이너가 종료되더라도 생성된 파일은 유지된다. 

기 생성된 컨테이너 삭제하고 마운트 옵션을 지정해 다시 생성하다. 

 > docker stop news-container

 > docker run --name news-container -v ${PWD}/output:/app/output -d news    (백그라운드에서 수행 -d옵션)

컨테이너 상태 확인

로컬 디렉토리 파일 확인

docker 컨테이너 정보 확인

> docker inspect news-container

마운트 정보 확인

컨테이너 상태 확인

> docker stats

컨테이너 stop

> docker stop news-container

 

반응형

댓글