8. cron을 이용한 정기적인 크롤링


파이썬을 이용한 머신러닝, 딥러닝 실전개발 입문

파이썬을 이용한 머신러닝, 딥러닝 실전개발 입문 책과 강의를 바탕으로한 코드 리뷰 및 정리입니다. 자세한 내용은 책과 강의를 참고해주세요.


2. 고급 스크레이핑

2-4. cron을 이용한 정기적인 크롤링


Cron
  • macOS와 리눅스에서 사용.
  • 데이터 수집과 같은 애프리케이션 / 로그, 백업과 같은 시스템 / 시스템이 제대로 동작하고 있는지 감시에 쓰이는 정기적인 처리를 수행.


Crontab 설정 방법
  • 기본구조

    crontab
    분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7) <실행할 명령어의 경로
    
    • 요일 : 월(1), 화(2), … , 토(6), 일(7 or 0 )


    숫자 이외에도 다음과 같은 것들을 지정할 수 있다

    이름사용 예설명
    리스트0,10,300,10,30을 각각 지정한다
    범위1-51,2,3,4,5를 범위로 지정한다
    간격*/1010,20,30.. 등 10간격으로 지정
    와일드카드*모두 지정


  • 예시

    macOS에서 매 분 마다 “HI”라고 이야기 하는 프로그램

    * * * * * /usr/bin/say "HI"
    

    매일 아침 8시 30분에 “Good morning”라고 이야기 하는 프로그램

    30 8 * * * /usr/bin/say "Good morning"
    

    매월 20일 18시 32분에 /home/hoge/fuga.sh라는 프로그램을 실행하는 프로그램

    32 18 20 * * /home/hoge/fuga.sh
    

    매월 마지막날에 뭔가를 하고싶은 프로그램

    50 23 28-31 * * /usr/bin/test $( date -d '+1 day' +%d) -eq 1 && 실행할 명령어
    


  • 표준출력 혹은 오류출력이 있으면 메일을 준다. 이 기능을 비활성화 하고 싶으면 crontab 앞의 MAILTO 를 비워두면 된다.



매일 환율 정보 저장하기
from bs4 import BeautifulSoup
import urllib.request as req
import datetime

#HTML가져오기
url="https://finance.naver.com/marketindex/"
res=req.urlopen(url)

#HTML분석하기
soup=BeautifulSoup(res, 'html.parser')

#원하는 데이터 추출
price=soup.select_one('div.head_info > span.value').string
print("usd/krw",price)

#저장할 파일 이름 구하기
t=datetime.date.today() #오늘 날짜
fname=t.strftime("%y-%m-%d")+".txt" #strftime : 날짜 -> 스트링
with open(fname, "w", encoding="utf-8") as f:
    f.write(price)

이 코드를 매일 한번 씩 실행하고 싶다면 cron을 설정해야 한다.


터미널에 다음과 같이 실행한다.

crontab -e

실행하면 자동으로 vi editor가 실행되며 editor 안에 다음을 작성해 주면 된다. (경로는 본인 경로를 지정한다)

0 7 * * * python3 /Users/Documents/Github/Web-Crawling/everyday-dollar.py






© 2018. by yeo0

Powered by yeo0