루키찾기 프로젝트 : 24.03.04~24.03.05
2024. 3. 4. 19:08ㆍ프로젝트/도서플랫폼 루키찾기 예측모델링
2024년 3월 4일 (월) 1일차
과제 1.
- 교보문고 월간 베스트셀러 2024.01.31. ~ 2024.03.28. 100개씩 크롤링 하기
- book_info 칼럼을 저자, 출판사, 출판일로 나눠서 추가하기
- review_counts 칼럼에서 리뷰 개수만 남기기
- 어떻게 하면 여러 출판사의 데이터를 가지고 인재를 찾을 수 있을까?
- 서점 목록
- YES 24
- 알라딘
- 교보 문고
- 리디 북스
- 서점 목록
과제 2.
✅프로젝트 목표: TOP 100에 들기 전에 TOP 100에 들어갈 것 같은 인재 찾기
✅진행 순서
- TOP 100 공통점 찾아보기
- 키워드 Pick
- 분야
- 리뷰 점수
- 출판사
- TOP 101 ~ 200까지 데이터를 조회해 TOP 100 공통점을 가지고 있는 책 찾기
- 공통점이 있는 책 작가가 TOP 100에 들었는지 확인하기
학습 내용 일부 정리
- 크롤링 라이브러리: 리퀘스트/ 스크래퍼/ 셀레니움(진짜 쉬움)
- 셀레니움은 특이하게 인터넷창을 띄운다.
- 파인드 엘리먼츠: 요소가 어딨는지 찾는 기능
- 클릭: 요소 찾았으면 클릭하는 기능
- 텍스트: 요소를 찾았으면 텍스트 값을 가져오는 기능
- 개발자 모드로 하나하나 선택되는 것, html 요소 선택하는 기능
2024년 3월 5일 (화) 2일차
- 문제 1: 내가 김첨지도 아니고 range 7번 버튼을 누르지 못하고 오류나는 게 너무 답답하다. 아직 답은 모름.
- 어쩌다가 7번을 하고 8번을 못누를 때도 있다. 이건 대체 뭘까?
- 해결 방법: 최하단, 버튼 누르기 생략하고 url로 바로 이동시켰다.
- 문제 2: 절판 책가격에 결측치가 있어서 concat이 안됨.
- 해결 방법: 결측치 순서를 확인해서 list 함수인 insert로 수작업했다.
상담내용 정리
문제점 1. ‘stale element reference: stale element not found’ 오류
- time.sleep을 많이 사용하면 교보문고 홈페이지에서 이상하게 여겨 값을 느리게 준다. 그래서 time.sleep으로 지정한 시간보다 오래 걸려서 내용이 나와 오류가 나오는 것.
- 해결 방안
- time.sleep을 사용하는 시간을 늘린다.
- 코드 : driver.implicitly_wait(10)
- time.sleep 시간을 랜덤으로 돌아가게 한다.
- 랜덤으로 돌아가는 코드
- import randmi
- import random
- random.random() *10
- 랜덤으로 돌아가는 코드
- 핫스팟으로 크롤링을 해보고, 한 시간이 지난 후에 핫스팟을 껐다가 다시 켜서 아이피를 바꾼 후 다시 크롤링을 한다.
- time.sleep을 사용하는 시간을 늘린다.
문제점 2. ‘Length of values (19) does not match length of index (20)’ 오류
- 인덱스가 부족해서 나오는 오류다.
- 직접 해결해보자.
문제점 3.
- 문제점: 월을 넘기는 미니창의 스크롤을 못내려서 다음 월간으로 넘어갈 수 없음
- 해결 방안: URL 패턴을 파악해서 driver 안에 입력하기
문제점 4.
- 문제점: 사이트마다 "미니 스크롤" 코드에 해당하는 부분이 다를 수 있음.
- 해결 방안: 월간에 해당하는 "URL" 집중적으로 본다. (패턴을 파악해서 driver 안에 입력)
1. 변수설정
element = driver.find_element(By.XPATH, '//*[@id="selListType-menu"]')
2. 미니 스크롤 미세 설정해서 내리기 (50부터, 지금 200해봄)
driver.execute_script("arguments[0].scrollTop += 200;", element)
<참고 코드: 즉석 피드백 주심! 정확하지 않으니 재확인하고 공부해서 사용하기>
- driver.implicitly_wait(10) 웹 드라이버가 요소를 찾을 때까지 대기하는 시간을 설정하는 데 사용한다. (타임 슬랩 아래에(위?아래?) 적는다. 화면이 열릴 때까지 10초 동안 기다리겠다는 의미이다.)
- import random
- random.random() *10 랜덤으로 쉬어주는 코드 (교보가 크롤링 많이 하면 아이피 기준으로 막기도 한다. 핫스팟 이용하기, 랜덤 함수를 사용해서 짧게 끝내기, 랜덤하게 쉬게끔 하면 된다.)
'프로젝트 > 도서플랫폼 루키찾기 예측모델링' 카테고리의 다른 글
루키찾기 프로젝트 : 24.03.06~24.03.11 (0) | 2024.03.12 |
---|