09.14 항해 2일차 TIL

7444 단어 TILTIL

1주차 프로젝트 닉네임 생성기

"내 이름을 정해줘!"

19조 (조윤재, 심선아, 한우석)


계속 해결이 안되던 "현재 페이지를 크롤링 하고 다음 페이지로 넘어가기" 기능이 드디어 어느정도 구현이 되었다. 어제 오전 10시부터 오늘 오후 3시까지 정말 한 발자국도 나가지 못해 조급해 하고 있었는데 갑자기 해결이 되니까 마음이 편해지고 그 문제가 해결 되고 기능이 정상적으로 돌아가는걸 보면서 뭔가 엄청 뿌듯한 느낌을 받았다.
이번에도 어차피 에러가 발생 할 것이라고 생각하며 한줄 한줄 써내려간 그 코드가 제 기능을 할 때 그 기분... 그 맛을 잊을 수 없다.. 그 하나가 해결 되니 다음 스텝이 어느정도 보이면서 내가 갈 길이 만들어진 기분 이였다.

구현 기능

  • 명사, 형용사, 동물, 과일 단어 크롤링 후 DB 저장
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!')                                 # 완료 메시지 출력

좋은 웹페이지 즐겨찾기