정구리의 우주정복
Python Project 01. 단어장 만들기 (3) 2일차 - 단어장 선택하기 , 엑셀에 저장된 것 리스트에 옮기기 , 리스트 끊어서 저장 본문
Python Project 01. 단어장 만들기 (3) 2일차 - 단어장 선택하기 , 엑셀에 저장된 것 리스트에 옮기기 , 리스트 끊어서 저장
Jungry_ 2020. 4. 5. 00:52
단어장 불러오는 소스
# 단어장 불러와서 엑셀에 자동저장하기
import ssl
import re
from urllib.request import urlopen
from bs4 import BeautifulSoup
from openpyxl import Workbook
context = ssl._create_unverified_context()
#url 선택부분
print('''원하는 단어장을 선택하세요\n 1. 중등\n 2. 고등\n 3. 토익''')
selectLevel = int(input("번호 입력 : "))
if selectLevel == 1:
url = 'https://learn.dict.naver.com/m/endic/wordbook/mhs/100001/200001/words.nhn?filterType=0&orderType=2&pageNo='
elif selectLevel ==2 :
url = 'https://learn.dict.naver.com/m/endic/wordbook/mhs/100004/300059/words.nhn?filterType=0&orderType=2&pageNo='
elif selectLevel ==3 :
url = 'https://learn.dict.naver.com/m/endic/wordbook/exam/10001/20001/words.nhn?filterType=0&orderType=2&pageNo='
else :
print("default")
#단어 불러오기
page = 1
#openpyxl 부분
wb = Workbook()
ws1 = wb.active #활성 시트를 만들어준다
ws1.title='wordList'
n=1
#re 부분
pattern = re.compile(r'\s+')
for i in range(5) :
newUrl = url+str(page)
html = urlopen(newUrl,context=context).read()
soup=BeautifulSoup(html,'html.parser')
wordClass=soup.find_all(class_='lst_li2')
for i in wordClass :
word = i.select_one('.words').text #단어정보
mean = i.select_one('.txt_ct2').text
splitMean=(mean.split(','))[0]
splitMean=re.sub(pattern,'',splitMean)
wordList =[word,splitMean]
for i in range(n,n+1): #1부터 2까지 (2개를 넣어줄거라서)
ws1.cell(row=i,column=1).value=wordList[0] #앞에 단어를 넣어줌
ws1.cell(row=i,column=2).value=wordList[1]
n=n+1
page = page+1
wb.save('./wordList.xlsx')
어제 단어장 크롤링 부분에서 단어장의 종류를 좀 늘려줬음 ! 원하는 단계를 선택할 수 있게 끔 !
if 문을 이용해서 url 을 바꿔줌으로서 다른 단어장이 크롤링 되게 끔 했다 .
단어 읽어서 20개씩 출력해주는 소스
#단어 읽어들여서 20개씩 끊어서 출력해주기
# 이전 , 다음 기능 도 생각해보기
from openpyxl import load_workbook
#data_only = True 를 해야지 값으로 가져옴 (안그러면 수식)
load_wb = load_workbook('./wordList.xlsx',data_only=True)
load_ws = load_wb['wordList'] #시트이름
words = [] #단어가 들어갈 리스트
mean = [] # 뜻이 들어갈 리스트
eng = load_ws['A'] #A,B.. : 열을 가져옴
kor = load_ws['B'] #1,2,... : 행을 가져옴
#word와 mean 에 넣은 상태
for cell in eng:
words.append(cell.value)
for cell in kor:
mean.append(cell.value)
page = 0
end = len(words) #
div = 20 #20개씩 끊어서 출력해줌
#20개씩 각 리스트에저장
wordResult = [words[i*div:(i+1)*div] for i in range((end+div-1)//div)]
meanResult = [mean[i*div:(i+1)*div] for i in range((end+div-1)//div)]
n=0
for i in wordResult[page]:
print(str(n+1)+'. '+i+" "+meanResult[0][n])
n=n+1
n=0
while True:
print('(1) 이전 (2) 다음 (3) 현재 단어 시험보기 (4) 단어장 종료\n')
selectMenu = int(input("메뉴입력 : "))
if selectMenu== 1:
if page ==0 :
print("첫번째 페이지 입니다")
else:
page = page-1
for i in wordResult[page]:
print(str(n+1)+'. '+i+" "+meanResult[int(page)][n])
n=n+1
n=0
elif selectMenu== 2:
if page ==6: #리스트 맨 마지막인 거 확인하는거 찾기
print("맨 마지막 장입니다")
else:
page = page+1
for i in wordResult[page]:
print(str(n+1)+'. '+i+" "+meanResult[int(page)][n])
n=n+1
n=0
elif selectMenu == 3 :
print("단어시험 공사중")
elif selectMenu == 4 :
break
진짜 이게 뭐라고 너무 헷갈렸고 오래걸렸다 ㅜㅜ
처음에 생각한건 엑셀에 있는걸 하나의 리스트에 받아서 출력을 해주는 거였는데 도저히 어떻게 해야할 지 감이 안와서
엑셀에서 받아온거 저장 리스트(words[] , mean[]) -> 저장된거 에서 20개씩 끊어서 2중 리스트를 만든거 (wordList[words[],words[] ...] , meanList[mean[],mean[] ...])
wordList[page][n] 이런 형태로 만들어서 다뤄주었다
wordResult = [words[i*div:(i+1)*div] for i in range((end+div-1)//div)]
meanResult = [mean[i*div:(i+1)*div] for i in range((end+div-1)//div)] #div=20
for 문을 되게 신기하게 쓴다 이거 뭔지 공부해봐야함 이게 20개씩 나눠서 리스트 안에 리스트로 만들어주는 코드임
그래서 wordList[0][0] 하면 단어장의 첫번째 단어 wordList[0][1] 하면 두번째 단어 wordList[1][0] 하면 21번째 단어 이렇게 저장이 되어있는거야 !!
근데 selectMenu==2 일때 if 문에서 일단 page ==6 이라고 해놨는데 이걸 if 리스트가 끝났을때 로 바꿔줘야하는데 그건 내일 해봐야겠다
그리고 아직 3번 단어시험이 공사중인데
만약 단어시험 키를 누르면 현재 띄워진 20개의 단어들이 랜덤하게 나오면서 맞추는 ? 그런걸 만들어볼까 생각중이다 ! 이것도 내일 아마 새로운 파일에 함수로 만들어서 import 받아서 쓸 생각이다 !
그리고 단어장 불러오는거랑 단어 출력해주는거를 하나의 프로그램으로 만들어줘야하는데 그건 또 어떻게 하는거지
대망의 결과물
이렇게 이전 , 다음 또한 다 구현했다 !!!!
공부해야할 것
1. wordResult = [words[i*div:(i+1)*div] for i in range((end+div-1)//div)] 이거 어떤 원리인지 공부
2. openpyxl 공부
3. 리스트 끝 찾기
내일 다듬을거
1. 페이지 관련 (현재 몇페이지인지 , 원하는 페이지 이동하기)
2. 단어시험 만들기
'PYTHON > PROJECT' 카테고리의 다른 글
Python Project 01. 단어장 만들기 (6) - 제작완료 (소스코드 및 후기) (0) | 2020.04.06 |
---|---|
Python Project 01. 단어장 만들기 (5) 4일차 - 단어시험 , 페이지 구현 완료 (0) | 2020.04.06 |
Python Project 01. 단어장 만들기 (4) 3일차 - 단어 시험 만드는 중 , 페이지 구현 (0) | 2020.04.06 |
Python Project 01. 단어장 만들기 (2) 1일차 - 네이버 단어장에서 단어 추출 , re 모듈 사용 (모든 공백문자 없애기), openpyxl을 이용해 엑셀에 저장 (0) | 2020.04.03 |
Python Project 01. 단어장 만들기 (1) 구상(수정1차) (0) | 2020.04.03 |