(오늘의 영화 : 블레이드 러너 1982)

오늘 한 일 (To Do List)

  • 지난 번 회의 때, 이야기했던 역할분담으로 "DB"에 더 많은 정보들을 저장하기 위해서 '크롤링 기능'을 주로 담당하게 되었다.

지훈 : 데이터 어디서 가져올지 크롤링할 곳 / 오픈 api 사용하는 방법 / 추천해주는 영화 볼 수 있는 링크를 어디서 가져올지

  • 기존에 selenium 크롤링으로, ①"네이버 영화" ②"영화진흥위원회" 사이트에서 자료를 가져왔다.

네이버 영화 => "선호장르 조사를 위한 알고리즘에 이용되는 영화정보" (Page2에서 나오는 영화정보들)
count : 168개

영화진흥위원회 => "최종선호장르에 맞는 독립영화 추천에 사용되는 영화정보" (Page3에서 나오는 영화정보들)
count : 422개

  • 우선, 제일 먼저 기존에 크롤링으로 사용하던 사이트에서 더 많은 정보들을 끌어오는 것을 진행하려고 한다.
    네이버에서, 1-10위만 가져왔다면, 이번에는 1-50위 정도로 한 장르당 50개의 영화DB를 가져올 계획이다.
    처음에는, 그냥 반복문만 늘려주면 되겠지? 라고 생각했던 나 자신이 멍청했다...크롤링을 해야하는 범위가 늘어나면서 규칙에 벗어나는 오류들이 발생할 확률 또한 늘어나게 되었고, 예상치 못하게 발생하는 오류들로 인해 디버깅의 나날들이 시작했다는 것을 알리는 신호였다..

  • 1-50위까지 크롤링을 통해서 장르 19개에 맞춰서 가져올 수 있다면, 50 * 19 = 950 / 대략 950개 정도의 영화 DB를 채울 수 있다. "어떻게 보면 이거 언제 다하지?" 라고 생각할 수 도 있지만, 지금의 나는 "좀 더 원활한 서비스 구현을 위해서 더 크롤링할 곳은 없을까?"라고 생각하고 있다는 것이 내가 이 일을 단순하게 무조건 해야하는, 스트레스를 받는 '업무'가 아니라, 스스로 관심이 있어서 더 해보고 싶어한다는 것을 다시금 느꼈다.

문제가 되었던 부분 (+해결방안)

문제 1. 이제는 한 번 테스트할 때마다 장시간 크롤링이 되다보니, 해당 사이트인 네이버에서 나를 자동 봇으로 취급하여, 접속을 차단하는 일이 벌어졌다....(나 AI아냐...)
=>

  • (해결방법)
    처음에 selenium을 배울 때, 거의 첫 구절에 이러한 부분이 있었다. 그 때 당시에는, 없어도 크롤링이 정상적으로 구현돼서, 없어도 되는 구문인가보다 했었다.
    그런데, 알고보니 이 headers에 들어가는 User-Agent가 "나는 자동 봇이 아니야!" 라고 말해주는 구문이었다는 것을 알게 되었다.
    사용하는 브라우저와 맞는 user-agent 값을 찾아서 이후에 해당하는 부분에 붙여놓고 해당하는 파일 상단에 붙여주면 바로 사용가능하다.

    headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}
    // 유저정보를 입력하는 구문 (Chrome ver.)
    '''

http://blog.naver.com/PostView.nhn?blogId=kiddwannabe&logNo=221185808375&redirect=Dlog&widgetTypeCall=true&directAccess=false
//자세한 설명은 해당 블로그를 통해서 참고

문제 2. 성인영화를 크롤링해야하는 경우가 발생.
'청소년 관람불가' 영화에 대한 영화정보를 크롤링해오는 과정에서 성인인증을 해야하는 상황에 놓이게 되었다.
자동적으로 작동되는 크롤링으로 성인인증을 위한 네이버 로그인이 가능할까?
=>

  • (해결방법)
    우선, 로그인은 충분히 가능하다. 처음에 배웠던 네이버 로그인 selenium 연습을 통해서 입력하고 로그인하는 것은 가능하지만, 제일 큰 장애물에 막혔는데, 바로... "네이버 캡챠"이다.
    "네이버 캡챠"는 자동적으로 크롤링을 하는 과정을 막기 위해서 네이버 측에서 '자동방지문자'를 이용하여 자동 크롤링을 막는 기능이다.
    크롤링을 사용하지 않았을 때에는, 자동방지문자는 별로 신경도 안쓰고 넘어갔었는데, 크롤링으로 자료를 가져오던 도중에 마주친 "자동방지문자"라는 녀석은 극악무도 그 자체였다..
    성인인증을 해야 가져올 수 있는 데이터들을 무시하기에는, 정말 랜덤하게 깔려있기에, 그런 것들을 다 고려하기는 어려울 것 같고 성인인증을 위해서는 '자동방지문자'를 뚤어서 로그인을 해야하는 상황에 놓이게 되었다.
    혹시나 하는 마음에 Google에 "네이버 자동문자입력방지기 무시하는 방법" 이라고 쳐보니, 나와 같은 시도를 하던 사람들이 많았던 것인지. 방대한 정보들이 넘쳐났다...(갓구글)
    친절하게 유튜브 동영상으로 하는 모습을 촬영해준 것들도 있어서, 이것을 참고해서 자동로그인을 성공했다...
    내 아이디와 비밀번호를 직접 치는 것은 나의 보안성에 문제가 될지도 몰라서 공용 네이버 아이디를 만들어서 진행하였다.

https://l0o02.github.io/2018/06/12/python-crawling-selenium-2/
// Facebook selenium으로 자동 로그인
https://www.youtube.com/watch?v=jg5Ph2s4dUw
// 네이버 자동방지문자 우회방법
https://sab-jil.tistory.com/2
// 네이버 자동방지문자 우회 1분설명

# 청불영화로 인한, 크롤링시 로그인 활성화되는 현상을 방지하기 위해서 임시계정을 만듬
# 아이디 : 내 아이디 / 비번 : 내 비밀번호
driver.find_element_by_xpath("//*[@id='gnb_login_button']/span[3]").click()
# 임시로, 본인계정으로 로그인 진행
# 조건을 입력해야하는 태그에 대한, ID 값을 찾아서 Send_keys 값으로 입력.
id = '내 아이디'
pw = '내 비밀번호'

driver.execute_script("document.getElementsByName('id')[0].value=\'" + id + "\'")
driver.execute_script("document.getElementsByName('pw')[0].value=\'" + pw + "\'")

# 로그인 버튼을 클릭한다.
driver.find_element_by_id("log.login").click()
profile
백엔드 개발자 준비생인 영화광 심리학도입니다. #node.js #Javascript #영화광 #심리학 #백엔드개발자

2개의 댓글

comment-user-thumbnail
2020년 3월 13일

청불ㅋㅋㅋ 문제 해결과정이 잼있네요~

1개의 답글