[Python] BeautifulSoup 을 이용한 데이터 추출

kk_jang93·2024년 6월 4일
0

BeautifulSoup 을 이용한 데이터 추출

개인 프로젝트 진행중 ( 기록용 )

토이프로젝트를 진행하다보니 로또 번호를 오늘 날짜의 기준으로 100회 분의 데이터를 조회해야할 일이 생겼었다.

데이터를 어떻게 가져와야 효율적일까? :thinking_face:

여러 방법을 고민하다가 파이썬을 이용하기로 하였다.
파이썬에 대하여 지식이 얕은 탓에 열심히 구글링을 통하여
아래 코드를 적용시켰다.

BeautifulSoup 를 이용하자 !

  • 데이터를 가져오는 비즈니스 로직
def fetch_lotto_numbers(draw_no):
    url = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={draw_no}"
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        if data["returnValue"] == "success":
            result = {
                "totSellamnt": data["totSellamnt"],
                "returnValue": data["returnValue"],
                "drwNoDate": data["drwNoDate"],
                "firstWinamnt": data["firstWinamnt"],
                "drwtNo6": data["drwtNo6"],
                "drwtNo4": data["drwtNo4"],
                "firstPrzwnerCo": data["firstPrzwnerCo"],
                "drwtNo5": data["drwtNo5"],
                "bnusNo": data["bnusNo"],
                "firstAccumamnt": data["firstAccumamnt"],
                "drwNo": data["drwNo"],
                "drwtNo2": data["drwtNo2"],
                "drwtNo3": data["drwtNo3"],
                "drwtNo1": data["drwtNo1"]
            }
            return result
    return None
def get_recent_lotto_numbers():
    recent_lotto_numbers = []
    url = "https://www.dhlottery.co.kr/common.do?method=main"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
    latest_draw_no = int(soup.select_one("#lottoDrwNo").text.strip())

    today = datetime.today()
    one_year_ago = today - timedelta(days=365)

    for draw_no in range(latest_draw_no, 0, -1):
        result = fetch_lotto_numbers(draw_no)
        if result:
            draw_date = datetime.strptime(result["drwNoDate"], "%Y-%m-%d")
            if draw_date < one_year_ago:
                break
            recent_lotto_numbers.append(result)

    return recent_lotto_numbers
  • 데이터를 Json 형태로 보이게 print 하였다. 추후 원하는대로 가공하면 될 것 같다.
if __name__ == "__main__":
    recent_lotto_numbers = get_recent_lotto_numbers()
    for result in recent_lotto_numbers:
        print(json.dumps(result, ensure_ascii=False, indent=2))
profile
앱개발을 사랑하는 개발자

0개의 댓글