본문 바로가기
Project/2

내일배움단 15일 프로젝트 8-12일차 개발일지

by 썬이 2021. 10. 4.

#코딩 개발일지 시작의 한마디

  • 매일매일 개발일지 쓰는 것... 참 쉽지 않다 ㅋㅋㅋㅋㅋㅋ 꼭 무슨 기능을 구현하거나 발전이 있어야만 쓰게 되는 개발일지... 오늘은 드디어 백엔드 크롤링에 성공한 기념으로?! 쓴다.

# 개발 업무내용

[오늘의 목표]

  1. 백엔드 해야 할 부분 정리, 백엔드 공부
  2. 크롤링 - 번역 - db에 입력

[토의 내용]

  • 진전 상황 보고
  • 튜터님과 업무 고민 해결

# 업무 중 이슈/고민 .. 그리고 해결한 내용

백엔드... 진짜 스트레스 장난 아니다. 이렇게 어렵다니...ㅠㅠ 뭔가 프론트엔드처럼 코드를 적용하기 쉬운 것도 아니고..... 어떤 기능을 구현하고 싶다면 관련 프레임워크나 함수나 문법을 대충이라도... 공부해야하니까 단순히 우리가 배운 강의 내용 가지고 새로운 기능을 구현하기가 쉽지 않은 것 같다. 접근 자체가 쉽지 않달까?

 

 

필요한 백엔드 기능

- 질문 크롤링 -> 질문 페이지에 랜덤으로 띄우기

- 질문페이지의 회원 정보 + 질문 + 답 db에 저장

- 질문 + 답 실시간으로 메인페이지에 랜덤으로 띄우기(익명. 회원 정보 x)

- 나의 회원 정보 + 질문 + 답 mypage에서 확인 가능하도록!

 

 

현재 구현한 기능

- 질문 크롤링 + 번역 api 이용해서 영어 -> 한국어로 번역 후 db에 저장

 

 

http://iteslj.org/questions/

 

Conversation Questions for the ESL/EFL Classroom (I-TESL-J)

 

iteslj.org

크롤링할 사이트의 문제점

1. 크롤링해야 할 질문들이 메인페이지를 지나 카테고리별 서브페이지에 들어가야 있었다.

2. 영어라서 번역 필요

 

 

https://www.youtube.com/watch?v=EH50a7UrUfw 

이 영상을 참고해서 페이지 안의 링크 내용 크롤링하는 법 배움.

bs4와 requests 사용해서 각 서브페이지의 href 찾고, href가 html 파일명으로 되어있어서 앞에 남은 주소를 붙여넣어 카테고리별 페이지 url을 완성했다.

그리고는 selenium을 이용해서 웹드라이버로 보냈고, 각 url 안의 질문을 크롤링 할 때에는 다시 아래 코드를 참고해서 beautifulsoup과 copy selector를 사용해서 완성!

 

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
notices = soup.select('div.p_inr > div.p_info > a > span')

for n in notices:
    print(n.text.strip())

https://beomi.github.io/gb-crawling/posts/2017-02-27-HowToMakeWebCrawler-With-Selenium.html

 

Selenium으로 무적 크롤러 만들기 · GitBook

Selenium은 주로 웹앱을 테스트하는데 이용하는 프레임워크다. webdriver라는 API를 통해 운영체제에 설치된 Chrome등의 브라우저를 제어하게 된다. 브라우저를 직접 동작시킨다는 것은 JavaScript를 이용

beomi.github.io

 

 

사실 아직... selenium과 bs4 프레임워크의 기능을 완벽하게 이해한 건 아니기 때문에 완전히 감을 잡지는 못했지만... 일단 간신히 어떻게든 성공시키긴 했다.. ㅋㅋㅋㅋㅋㅋㅋ

확실히 selenium을 사용하니까 시간도 오래걸리고 꽤나 느리다. (파이썬 계속 돌리면서 개발일지 작성하는 중ㅋㅋㅋㅋ)

 

처음에는 엑셀 파일이나 db로 저장하면 한 셀에 그 카테고리 전체가 들어가서 질문들이 하나하나씩 저장되는 게 아니라 뭉텅이로 저장되는 문제가 생겼는데, selenium가 bs4를 같이 사용하니 이러한 문제가 해결됐다. (문제가 있었던 때는 bs4만 사용했었다.)

 

 

https://blockdmask.tistory.com/540

 

[python] 파이썬 구글 번역 api 사용하기 (최신버전)

안녕하세요. BlockDMask입니다. 오늘은 파이썬에서 구글 번역 api인 googletrans를 사용하는 방법에 대해서 이야기해보려 합니다. <목차> 1. 구글 번역 api 설치 2. 구글 번역 api 예제와 설명 3. google translat

blockdmask.tistory.com

구글 번역 api는 googletrans 4.0.0 버전을 설치하고 위 링크를 이용하면 쉽게 적용 가능하다.

사실 너무... 번역체 느낌이라 파파고 api를 사용해볼까도 했는데, 아무래도 구글 api처럼 간단한 느낌은 아니라... 그냥 구글로 가기로 결정! (사실 너무 힘들었기 때문에... 크롤링은 그만하고 싶었던 마음이 컸다 ㅋㅋㅋㅋ)

 

 

마지막으로 mongodb 이용해서 저장하면 끝!

아래는 pymongo 기본 코드

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbbbackco # db 이름
doc = {'question': q_korean.text} # row 이름
        db.questions_ko.insert_one(doc) # collection내의 db 이름

 

 

https://fromyeongsxxn.tistory.com/32

 

웹 크롤링(bs4, selenium) / 구글 번역 api / pymongo로 db에 저장

import requests from bs4 import BeautifulSoup from selenium import webdriver from googletrans import Translator from pymongo import MongoClient # BeautifulSoup # URL을 읽어서 HTML 받아오고, HTML을 B..

fromyeongsxxn.tistory.com

자세한 코드를 확인하고 싶다면 위 링크 클릭!

 

 

...외에도 수많은 시도 끝에 성공...!!
db에 무사히 안착 중... 한시간째 돌리는 중인데 데이터 양이 많아서인지 꽤 오래걸린다.
튜터님과 열심히 이야기하는 우리 조

# To-do List

화요일 목표

- 민정님 질문 페이지에 랜덤으로 질문 띄우기(랜덤으로 띄우기는 민정님이 구현해놓으신 프론트 json이용)

- 질문 페이지에서 작성한 질문과 답을 넣는 db 구축. (질문과 답 저장)