Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- Delphi
- kidznote
- flyio
- 일의격
- TypeScript
- vmmem
- beautifullsoup
- Nextjs
- superbase
- Markdown
- java
- Book
- wsl2
- reactnative
- vercel
- tessrect
- react
- stepzen
- AWS
- Expo
- springboot
- docker
- svelte
- WSLHostPatcher
- oraclecloude
- dokerfile
- shadcn-ui
- edgestore
- spring
- FastAPI
Archives
- Today
- Total
Blog
[python] 키즈노트 알림장, 앨범 가져오기 본문
키즈노트 알림장, 앨범 가져오기 with python
- 키즈노트의 오래된 알림장 및 앨범을 다운받으려 알아봤다.
크롬 확장으로 두가지 정도 찾을 수 있었는데,
현재(2023-01-11)로써는 둘 다 정상 동작이 안된기에 개발하기로 했다.
우선 대충 html을 보니 아래와 같은 순서로 진행하면 될 것 같다.- 로그인 후 알림장 선택
- 페이지 소스 확인
- report-list-wrapper 클래스로 항목 별 링크 수집
- 각 링크 조회해서 sub-header-title 로 일자 수집
- content-text 로 본문 수집
- img-grid-container 에서 downloadsrc 로 이미지 주소 찾고 filename 으로 저장
- 스크립트하면 파이썬이 떠오르기에 파이썬으로 진행해보자
아래 링크에 따라 개발 환경을 만들어준다 - Windows에서 Python을 사용한 웹 개발
- 시간절약을 위해 속성으로 만들어야한다. 아래 링크를 따라 스크립트 요령을 배우자
- python으로 web scraping
- 처음에는 브라우저에서 로그인 후 쿠키를 복사해 requests 모듈을 활용해 쿼리하는 방식을 생각했다.
되긴되는 데, 매번 그러자니 번거로워서 쿠키를 하드코딩으로 작성해 활용할까 했지만 다른 환경에서도 이용해야할 것 같아 browser_cookie3 모듈을 활용해 쿠키를 수집하기로 했다 - 메인 작업은 노트북에서 진행하기로 하고 여유가 생기면 집에서도 작업할 생각으로 깃허브에 올려 진행했다.
- 노트북으로 테스트 코드를 작성하고 집pc로 해보니 안됐다
계속해서 브라우저의 쿠키를 못 가져 온다하는데
알아보니 크롬의 환경설정 사용자 프로필 경로가 다르면 발생한다고 한다
그렇기에 browser_cookie3 사용할 때 브라우저의 사용자 프로필이 여러개면 명시적으로 설정해줘야 한다
설정 마치니 정상적으로 진행됐다. - 알림장은 얼추 다 진행됐고 유사하게 앨범을 해보자
차이는 앨범에는 영상 파일이 들어간다는거? 살펴보니 최대 하나만 들어가는 것 같아 이것도 태그 따서 처리해주면 될 것 같다
된다된다 알아서 다운받는다. - 네이버 밴드에 올려 관리하려고 하는데, 상세 페이지별 내용은 텍스트로 만들어서 따로 관리를 해야하나 싶다
아니다 별도로 관리하면 귀찮으니 전부 이미지로 만들어 앨범에 관리하자
우선 모듈 찾아보고 안되면 마지막 선택으로는 이미지 파일을 생성해 텍스트를 그리는 방식을 고민해보자 - 아래 처럼 할 수 있는 모듈이 있긴한데 html page를 바로 이미지로 뜨는게 어떤 앨범인지 알아볼 수도 있고 직관적이여서 이를 사용하기로 했다
html 을 이미지로 저장하긴하는데 전체페이지를 저장하는 것은 잘 없는듯 하다- html → 이미지
- txt → 이미지
- 셀레니움을 활용해서 하는 방법이 일반적인듯하다
이것도 해상도를 지정해주거나 아니면 headless 옵션을 줘서 알맞은 해상도로 저장하는 방식을 활용해야 하는 것 같다
셀레니움으로 테스트를 하니 해당 url의 전체 스크린샷을 잘 찍는다 - 잘 동작되는 걸 확인했고 코드에 도입하려 하는데 아래 처럼 되어 있는 로직이 불필요해 보인다
- 브라우저에 로그인
- 브라우저 쿠키 얻기
- requests 모듈을 통한 쿼리 호출
- 뷰티풀숲을 활용한 html 파싱
- 셀레니움을 사용하기로 했으니 아래 로직으로 전부 갈아 치우며 정리하자
- headless 셀리니움 실행
- 로그인
- 구 홈페이지 이동
- 호칭설정
- 알림장 또는 앨범 이동
- 마지막 페이지 알아내기
- 첫 페이지 부터 마지막 페이지 까지 아래 로직 순차 적용
- 상세 페이지 목록 알아낸 후 아래 로직 순차 적용
- 상세 페이지 이동
- 상세 페이지 일자 추출 (제목 또는 등록일)
- 일자 같이 유니크한 명칭으로 저장 경로 설정
- 상세 페이지 전체 스크린샷 저장
- 상세 페이지 동영상 저장
- 상세 페이지 이미지 갯수 알아낸 후 아래 로직 순차 적용
- 상세 페이지 내 이미지 저장
- 상세 페이지 목록 알아낸 후 아래 로직 순차 적용
- 속성으로 만들었지만 잘 돌아간다
나중에 쓰임새가 많아지면 좀 더 다듬으면 될 것 같다 - https://github.com/gi0210lee/kidznote-downloader