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
- kotlin list
- 유튜브 요약
- getChangePayload
- 스피너
- ktor client
- DiffUtil.ItemCallback
- list map
- llm
- ChatGPT
- video caching
- Zsh
- android exoplayer
- ExoPlayer
- exoplayer cache
- android ktor
- ktor api call
- AWS EC2
- kotlin collection
- 안드로이드
- ListAdapter
- build with ai
- 시행착오
- Python
- map
- ListAdapter DiffUtil
- doc2vec
- 유튜브
- FastAPI
- android custom view
- android
Archives
- Today
- Total
버튼 수집상
[FastAPI] 인트라넷 앱을 위한 크롤링 API 만들기 - 0. 소개 본문
배경
인트라넷을 앱으로 만드는 내부 프로젝트가 착수됐다.
인트라넷은 정적문서로 만들어진 오래된 웹사이트라, 앱-웹을 연동시키는 API를 새로 만들어야 했다.
웹팀이 API를 만드는 동안, 앱팀은 UI 및 신기능 테스트를 위해 데모앱을 만들어보기로 했다.
그런데 빈 껍데기 앱을 만들자니 아무래도 허전하여, 필요에 맞게 간단한 API를 우선 직접 만들기로 한다.
✅FastAPI란?
경량화된 API 서버 만들기에 최적화된 파이썬 웹 프레임워크.
Swagger API 문서화 지원.
📝왜 크롤링 API를 만들었나?
1. 데모 앱에 필요한 최소한의 데이터를 읽어오는 API가 필요했다.
2. 회사 내부 DB 읽기 권한이 없어서 크롤링으로 구현했다.
3. Java와 달리 Python은 스크립트 언어라서 컴파일된 실행파일(ex: jar 파일) 올리지 않고 수정사항을 빠르게 반영시킬 수 있다.
(현직회사 웹팀은 Java Spring Boot를 사용한다.)
📦웹서버 스펙
클라우드 환경 | AWS EC2 ubuntu |
웹 서버 | uvicorn (비동기 서버) |
웹 프레임워크 | FastAPI |
스크래퍼 | Selenium |
크롬 브라우저 버전 | 110.0.5481.177 |
참고1)
정말 당연하지만 몰랐던 것:
로컬머신과 똑같이 ec2 ubuntu에도 크롬 브라우저를 깔아야 selenium이 돌아간다.
설치는 이 블로그를 참고했다.
참고2)
셀레니움을 쓴 이유는 웹문서와 상호작용할 일이 있어서다. (ex. 클릭)
그런데 상호작용 후에 필요한 웹 요소를 찾을 때는 BeautifulSoup 같은 파서를 함께 쓰는 경우가 많다고 한다.
현재 셀레니움으로 원하는 웹 요소를 찾는 코드는 썩 직관적이지 않아서 수정을 고려중.
⚙️EC2 내부 세션
- SSH 터미널 세션
- 사용자가 EC2에 접속하여 명령을 실행하는 터미널 세션.
- 프라이빗 키로 접속한다.
- Screen 세션
- 백그라운드에서 FastAPI 애플리케이션(Uvicorn)을 실행.
- SSH 접속 종료 후에도 세션을 유지하기 위함.
- Selenium 프로세스
- FastAPI 내부에서 별도의 프로세스로 Selenium 실행.
후속글에서 이어서 적겠다.
728x90
'TIL - Python' 카테고리의 다른 글
[FastAPI] 인트라넷 앱을 위한 크롤링 API 만들기 - 1. screen 세션 (0) | 2024.02.13 |
---|---|
[Python] 쿼리 읽기가 어려워서 ORM을 써봤다. (0) | 2023.11.19 |
[FastAPI] Pydantic field 타입 에러 (fastapi.exceptions.FastAPIError: Invalid args for response field!) (0) | 2023.07.19 |
[Python] pymssql INSERT 할 때 중복값 체크해서 업데이트하기 (0) | 2023.05.23 |