"내 이름을 정해줘!"
19조 (조윤재, 심선아, 한우석)
계속 해결이 안되던 "현재 페이지를 크롤링 하고 다음 페이지로 넘어가기" 기능이 드디어 어느정도 구현이 되었다. 어제 오전 10시부터 오늘 오후 3시까지 정말 한 발자국도 나가지 못해 조급해 하고 있었는데 갑자기 해결이 되니까 마음이 편해지고 그 문제가 해결 되고 기능이 정상적으로 돌아가는걸 보면서 뭔가 엄청 뿌듯한 느낌을 받았다.
이번에도 어차피 에러가 발생 할 것이라고 생각하며 한줄 한줄 써내려간 그 코드가 제 기능을 할 때 그 기분... 그 맛을 잊을 수 없다.. 그 하나가 해결 되니 다음 스텝이 어느정도 보이면서 내가 갈 길이 만들어진 기분 이였다.
구현 기능
def wiki_words_noun_crawler(page): # 현재 페이지의 https://ko.wiktionary.org 를 제외한 부분을 받는다.
url = f'https://ko.wiktionary.org{page}' # 현재 페이지의 링크를 url 변수에 저장
count = 0
for re in range(150):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(f'{url}', headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
trs = soup.select('#mw-pages')
try:
for tr in trs: # tr은 #mw-pages 리스트 만큼 반복
rink = tr.select_one('a:nth-child(4)')['href'] # 다음 페이지 링크를 rink 변수에 저장
words = soup.select('#mw-pages > div > div > div > ul > li') # 현재 페이지 명사를 words 변수에 저장
url = f'https://ko.wiktionary.org{rink}' # 다음 페이지 링크를 url 로 넘겨준다.
for word in words: # word는 현재 페이지 명사 리스트 만큼 반복
all_words = word.select_one('a').text # 명사 텍스트 추출
if len(all_words) > 1: # 2글자 이상 텍스트만 구함
count += 1
# print(all_words)
doc = {
'word': all_words,
'class': 'noun'
}
db.wordsdb.insert_one(doc) # 크롤링한 명사 데이터 DB에 저장
except: # 오류가 나와도 메시지 출력 안함 (ㄱ,ㄲ,ㄳ,다음페이지 없음 등 필요없는 데이터)
('')
print(str(count) + '항목 Noun DB Upload Successes!') # 완료 메시지 출력