<py> 크롤링

Sinjae Lee·2021년 5월 24일
0

크롤링을 이용해서 역대 로또 당첨번호를 크롤링 하고 싶어졌다.
일단 크롤링을 하기 위해서는
http를 호출하는 라이브러리 Requests 와
request로 가져온 html을 Python이 이해하는 객체 구조로 만들어주고 의미있는 정보를 출력하기 위해 BeautifulSoup을 이용해 준다
처음에는 네이버 페이지에서만 출력하려 했으나 최신회차에 대한 업데이트가 자동으로 출력되게 할 방도를 몰라
동행복권 사이트에서 추첨 회차를 리스트로 출력
해당 리스트를 통해 네이버 검색엔진에서 당첨번호를 출력토록 하였다

import requests
from bs4 import BeautifulSoup

for index in NoList: ## 전체 회차 반복 url 출력
    url = f"https://search.naver.com/search.naver?sm=tab_drt&where=nexearch&query={index}회로또"
    req = requests.get(url)
    html = BeautifulSoup(req.text, "html.parser")
    numbers = html.select("span.num") ##출력된 url 페이지들에서 당첨번호 출력
    numbers_list = [int(number.text) for number in numbers]
    print(numbers_list)


해당 Url 에 회차별 숫자 변경을 통해 로또 당첨 번호를 조회 가능하고 페이지에서 span num 부분의 번호를 출력 가능하다

처음에는 while 문과 if 문을 통해
해당 회차 번호에 false 가 출력되면 멈추려 하였는데 저 부분이 검색엔진 입력 부분이라 현재 당첨번호가 나오지 않은 965회차도 입력이 되더라..

그래서 최신회차를 반영해주기 위해 동행복권 사이트 내부에서 최신 회차 리스트를 추출해오기로 했다

import requests
from bs4 import BeautifulSoup

## 동행복권 사이트에서 추첨 회차 리스트 추출
url = f"https://www.dhlottery.co.kr/gameResult.do?method=byWin" ##동행복권 사이트
req = requests.get(url)
html = BeautifulSoup(req.text, "html.parser") 
NoLists = html.select_one("select#dwrNoList").get_text() ##html에서 select 에서 id= dwrNoList 의 text 가져와
NoList = list(map(int,NoLists.split())) ## 전체회차 리스트로 가져와
for index in NoList: ## 전체 회차 반복 url 출력
    url = f"https://search.naver.com/search.naver?sm=tab_drt&where=nexearch&query={index}회로또"
    req = requests.get(url)
    html = BeautifulSoup(req.text, "html.parser")
    numbers = html.select("span.num") ##출력된 url 페이지들에서 당첨번호 출력
    numbers_list = [int(number.text) for number in numbers]
    print(numbers_list)

근데 964개 리스트 출력하는데 너무 오래걸린다 ㅠㅠ
어짜피 이 964개의 리스트는 변동이 없기 때문에 해당 출력된 리스트 들을 합친 후 신규 회차만 추가 되도록 동행복권 사이트 회차 리스트에서 -1 번째 리스트만 출력한 뒤 append 를 이용해서 합쳐줘보자

그리고 해당 리스트에서 출력된 숫자를 바탕으로
가장 많이 나온 숫자 7개
가장 적게 나온 숫자 7개 조합 후
해당 숫자에서 random 하게 6개 숫자를 출력하도록 한번 해보자 ㅎㅎ

물론 각 당첨 번호들은 서로간에 독립변수라서 의미 없는 짓이긴 하지만 어짜피 로또 판매점에서 자동으로 받을거
이렇게 하면 의미부여라도 되지 않을까 ^^;

사실 로또 당첨 번호에 대한 통계학적 분석이 논문으로도 있길래 읽 어봤는데 결론이 의미 없단다 ㅋㅋㅋ

여기서 조금 더 공부한뒤 추가 해보고 싶은 부분
동행복권 사이트 통해서 자동 매매 되도록 프로그래밍 가능하려나

profile
Back-end developer

0개의 댓글

관련 채용 정보