루키찾기 프로젝트 : 24.03.04~24.03.05

2024. 3. 4. 19:08프로젝트/도서플랫폼 루키찾기 예측모델링

 

2024년 3월 4일 (월) 1일차


과제 1.

  1. 교보문고 월간 베스트셀러 2024.01.31. ~ 2024.03.28. 100개씩 크롤링 하기
  2. book_info 칼럼을 저자, 출판사, 출판일로 나눠서 추가하기
  3. review_counts 칼럼에서 리뷰 개수만 남기기
  4. 어떻게 하면 여러 출판사의 데이터를 가지고 인재를 찾을 수 있을까?
    • 서점 목록
       
      1. YES 24
      2. 알라딘
      3. 교보 문고
      4. 리디 북스

과제 2.

✅프로젝트 목표: TOP 100에 들기 전에 TOP 100에 들어갈 것 같은 인재 찾기

진행 순서

  1. TOP 100 공통점 찾아보기
    • 키워드 Pick
    • 분야
    • 리뷰 점수
    • 출판사
  2. TOP 101 ~ 200까지 데이터를 조회해 TOP 100 공통점을 가지고 있는 책 찾기
  3. 공통점이 있는 책 작가가 TOP 100에 들었는지 확인하기

 

학습 내용 일부 정리


- 크롤링 라이브러리: 리퀘스트/ 스크래퍼/ 셀레니움(진짜 쉬움)
- 셀레니움은 특이하게 인터넷창을 띄운다.

- 파인드 엘리먼츠: 요소가 어딨는지 찾는 기능
- 클릭: 요소 찾았으면 클릭하는 기능
- 텍스트: 요소를 찾았으면 텍스트 값을 가져오는 기능

- 개발자 모드로 하나하나 선택되는 것, html 요소 선택하는 기능

 

2024년 3월 5일 (화) 2일차


 

  1. 문제 1: 내가 김첨지도 아니고 range 7번 버튼을 누르지 못하고 오류나는 게 너무 답답하다. 아직 답은 모름.
  2. 어쩌다가 7번을 하고 8번을 못누를 때도 있다. 이건 대체 뭘까?
  3. 해결 방법: 최하단, 버튼 누르기 생략하고 url로 바로 이동시켰다.
  4. 문제 2: 절판 책가격에 결측치가 있어서  concat이 안됨.
  5. 해결 방법: 결측치 순서를 확인해서 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
    • 핫스팟으로 크롤링을 해보고, 한 시간이 지난 후에 핫스팟을 껐다가 다시 켜서 아이피를 바꾼 후 다시 크롤링을 한다.

 

문제점 2. ‘Length of values (19) does not match length of index (20)’ 오류

  • 인덱스가 부족해서 나오는 오류다.
  • 직접 해결해보자.

 

문제점 3.

  1. 문제점: 월을 넘기는 미니창의 스크롤을 못내려서 다음 월간으로 넘어갈 수 없음
  2. 해결 방안: URL 패턴을 파악해서 driver 안에 입력하기

 

문제점 4.

  1. 문제점: 사이트마다 "미니 스크롤" 코드에 해당하는 부분이 다를 수 있음.
  2. 해결 방안: 월간에 해당하는 "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 랜덤으로 쉬어주는 코드 (교보가 크롤링 많이 하면 아이피 기준으로 막기도 한다. 핫스팟 이용하기, 랜덤 함수를 사용해서 짧게 끝내기, 랜덤하게 쉬게끔 하면 된다.)