본문으로 바로가기

소개

 

다음 뉴스와 네이버 뉴스를 날짜별로 데이터 수집하기 위해 필요한 날짜연산에 대해 알아보겠습니다.

 

 

날짜연산

 

다음 날짜 파라미터입니다.

regDate=20200809

 

 

 

네이버 날짜 파라미터 입니다.

date=20200809

 

 

 

날짜 연산을 위해선 datetime 모듈을 이용해야 하는데요.

 

자세한 설명은 아래 링크를 참조해 주시구요.

 

datetime — 기본 날짜와 시간 형 — Python 3.7.8 문서

datetime — 기본 날짜와 시간 형 소스 코드: Lib/datetime.py datetime 모듈은 날짜와 시간을 간단하거나 복잡한 방법으로 조작하는 클래스를 제공합니다. 날짜와 시간 산술이 지원되지만, 구현의 초점은

docs.python.org

 

하루 전의 날짜를 구하기 위해서는 다음과 같은 과정이 필요합니다.

 

날짜 형태의 문자열과 그와 같은 포맷으로 strptime() 함수를 이용해서 datetime 객체로 변환 후

timedelta 1 day 객체와 연산 후 다시 문자열로 변환합니다.

date = '20200809'
date_format = '%Y%m%d'
dt = datetime.datetime.strptime(date, date_format)
print(f'type: {type(dt)}, value: {dt}')
td = datetime.timedelta(days=1)
print(f'type: {type(td)}, value: {td}')
past_date = datetime.datetime.strftime(dt - td, date_format)
print(f'type: {type(past_date)}, value: {past_date}')
type: <class 'datetime.datetime'>, value: 2020-08-09 00:00:00
type: <class 'datetime.timedelta'>, value: 1 day, 0:00:00
type: <class 'str'>, value: 20200808

 

 

코드

 

8월 9일 날짜를 기준으로 이틀 전까지 요청합니다.

import requests
from bs4 import BeautifulSoup as bs
import datetime

date_format = '%Y%m%d'
date = '20200809'

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
url = 'https://news.daum.net/breakingnews/society?regDate={}'

for i in range(3):
    res = requests.get(url.format(date), headers=headers)
    if res.status_code == 200:
        html = bs(res.text, 'html.parser')
        cont = html.find('ul', {'class': 'list_news2 list_allnews'})
        title = cont.li.a.img['alt']
        print(title)

    dt = datetime.datetime.strptime(date, date_format)
    td = datetime.timedelta(days=1)
    date = datetime.datetime.strftime(dt - td, date_format)
"7월30일~8월8일 남대문시장 '케네디상가' 방문자 유증상시 코로나19 검사"
안산도시공사 노사 농촌일손돕기 '구슬땀'
영산강·섬진강 6개 지점에 홍수 특보