(오늘의 영화 : 블레이드 러너 1982)
지훈 : 데이터 어디서 가져올지 크롤링할 곳 / 오픈 api 사용하는 방법 / 추천해주는 영화 볼 수 있는 링크를 어디서 가져올지
네이버 영화 => "선호장르 조사를 위한 알고리즘에 이용되는 영화정보" (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. 성인영화를 크롤링해야하는 경우가 발생.
'청소년 관람불가' 영화에 대한 영화정보를 크롤링해오는 과정에서 성인인증을 해야하는 상황에 놓이게 되었다.
자동적으로 작동되는 크롤링으로 성인인증을 위한 네이버 로그인이 가능할까?
=>
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()
청불ㅋㅋㅋ 문제 해결과정이 잼있네요~