goodthings4me.tistory.com
로또 당첨번호를 확인하는 웹 페이지(동행복권)에 대한 파이썬 크롤링을 하는 김에 이전 포스팅(동행복권 로또 당첨번호 추출하는 파이썬 크롤링 코딩)에 이어서 이번에는 지정된 범위의 회차별 로또 당첨번호를 csv 파일로 저장하는 코드를 작성해보았다.
동행복권 로또 당첨번호를 CSV 파일로 저장하기
csv 모듈을 추가한 후 당첨번호를 추출하는 함수 일부를 수정하고, csv 객체에 추출된 당첨번호를 writerow() 메서드를 활용하면 저장이 된다.
[크롤링 소스 코드]
import requests
from bs4 import BeautifulSoup
import csv
def lottery_resust(fr, to):
try:
int(fr)
int(to)
except ValueError as e:
print(f'오류 발생: {e}')
return False
if fr == 0 or fr > to:
print('_from은 0이 아니거나 to보다 작아야 함')
return False
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36',
}
lottery_list = []
for n in range(fr, to + 1):
url = 'https://www.dhlottery.co.kr/gameResult.do?method=byWin'
payload = {'drwNo': n, 'dwrNoList': n}
req = requests.post(url, headers=headers, data=payload)
lotto_list = []
if req.status_code == 200:
soup = BeautifulSoup(req.text, 'html.parser')
win_res = soup.find('div', attrs=('class','win_result'))
# no = win_res.select_one('h4 > strong').text
# _day = win_res.find('p', class_='desc').text
# print(f'\n로또 {no} 당첨결과\n{_day}')
lot_num = [lot.text for lot in win_res.select('div > div.num.win > p > span.ball_645')]
lot_num.insert(0, n)
lot_bonus = win_res.select_one('div > div.num.bonus > p > span').text
lot_num.append(lot_bonus)
lottery_list.append(lot_num)
else:
print('추출 오류입니다!!')
print(lottery_list)
xls_name = f'lotto_{fr}_{to}.csv'
with open(xls_name, 'w', newline='') as f:
csv_obj = csv.writer(f)
header = ['회차', 'N1', 'N2', 'N3', 'N4', 'N5', 'N6', 'Bonus']
csv_obj.writerow(header)
for num in lottery_list:
csv_obj.writerow(num)
if __name__ == '__main__':
_from = 1007
to = 1008
lottery_resust(_from, to)
- 추출할 회차의 범위를 지정하기 위해 _from, to 인자를 활용했고,
- 만일 _from이 0이거나 to 보다 크면 False 리턴 처리를 했고 또한 _from이나 to가 숫자가 아닌 경우에는 오류(ValueError)가 발생하도록 하여 숫자만 처리되게 하였다.
- 당첨번호를 csv로 저장하기 위한 리스트를 만들고 회차와 당첨번호, 보너스 번호를 그 리스트에 담았고,
- open() 함수로 csv 파일을 생성한 후 리스트를 writerow() 메서드로 저장하였다.
- open() 함수에서 newline=''이 없으면 한 줄 개행이 되기 때문에 추가하였고,
- 만일 한글이 깨지는 증상이 발생할 경우 encoding='utf-8-sig'를 추가하면 해결된다.
[실행 결과]
(venv) D:\pythonDev>d:/pythonDev/venv/Scripts/python.exe d:/pythonDev/lottery_excel.py
[[1007, '8', '11', '16', '19', '21', '25', '40'], [1008, '9', '11', '30', '31', '41', '44', '33']]
(venv) D:\pythonDev>
▶ 관련 포스팅 더보기 https://goodthings4me.tistory.com/701
'코딩 연습 > 코딩배우기' 카테고리의 다른 글
파이썬 GUI 모듈 tkinter 연습(쿠팡 파트너스 상품 링크 관리 프로그램 만들기) (0) | 2022.04.07 |
---|---|
파이썬 truncate() 함수로 텍스트 파일 내용 삭제하기 (0) | 2022.04.07 |
동행복권 로또 당첨번호 추출하는 파이썬 크롤링 코딩 (0) | 2022.03.29 |
크롤링 도구 셀레니움(selenium) 업그레이드 (1) | 2022.03.25 |
네이버 지식인 명예의전당 질문 키워드 추출(with 파이썬 크롤링) (0) | 2022.03.23 |
댓글