개발

[C#, WPF] 로또번호 크롤링하기 (lotto number crawling)

딱딱키보드 2023. 4. 16. 13:06
728x90
SMALL

1. 주소 찾기

로또번호는 로또 홈페이지에서 크롤링할 수 있다.

https://www.dhlottery.co.kr/gameResult.do?method=byWin&drwNo=? 

위 ?자리에 1을 넣으면 1회차 로또번호, 2를 넣으면 2회차 로또번호를 받아올 수 있다.

다만 약속된 API형태의 데이터를 제공받는것이 아니므로, 크롤링한 데이터는 홈페이지(HTML 언어) 그 자체이고, 직접 잘라서 사용해야 한다.  

 

 

2. 소스로 보기

void GetLottoNumbers(int number)
{
    // 크롤링할 웹페이지 URL
    string url = "https://www.dhlottery.co.kr/gameResult.do?method=byWin&drwNo=" + number;

    // HtmlAgilityPack 라이브러리를 사용하여 HTML 문서를 파싱
    HtmlWeb web = new HtmlWeb();
    HtmlDocument doc = web.Load(url);

    // XPath를 사용하여 로또 번호 추출
    var nodes = doc.DocumentNode.SelectNodes("//div[@class='num win']");
    var numbers = nodes.Select(n => n.InnerText.Trim()).ToList();
}

위 소스를 보면 HtmlWeb를 이용하여 Load한 문서인 doc는 다양한 노드를 가지고 있다.

이 노드들 중 SelectNodes를 통하여 div 중 'num win' 이라는 부분을 골라내고 있다.  로또 홈페이지에서 이 부분에 로또번호가 들어가 있으므로 여기서 값을 크롤링할 것이다.

크롤링한 노드 중 우리가 필요한 데이터는 InnerText 안에 있다. Trim을 이용하여 numbers에 가져오면 아래와 같은 데이터를 볼 수 있게 된다.

 

 

3. 데이터 활용

 

이제 1회차 데이터를 가져오는것에 성공했다. 다음으로는 매개변수 number에 2를 넣어 2회차를 가지고 오면된다.

반복문으로 현재회차까지 가지고 온다면, 이후 문자열 연산을 통해 원하는 데이터구조에 넣어 활용하면 된다.

 

 

4. 보너스

보너스의 경우 아래와 같이 노드의 위치가 달라지니, 홈페이지의 html소스를 확인하여 소스의 일부 변경이 필요하다.

//var nodes = doc.DocumentNode.SelectNodes("//div[@class='num win']");
var nodes = doc.DocumentNode.SelectNodes("//div[@class='num bonus']");

 

 

5. 결론

공개된 자료를 크롤링하여 데이터를 가져와서 활용하는 방법을 알아보았다. 이 데이터 자체로는 큰 활용가치를 가지지 못하지만, 이와 같이 데이터를 크롤링하여 편리하게 시스템을 구성할 수 있다는 것을 항상 생각해야 한다. 이글을 보는 모두들 이번 로또 잘 되길 바라본다. 

728x90
LIST