프로젝트 일지/BMT16 4. 파이썬 크롤링 코드에 Process, Pipe 적용하기 저번 시간에 AWS Lambda에서 Pool을 지원하지 않는다는 사실을 알게 되었다. (자세한 과정은 여기 참고) Process와 Pipe를 이용해서 코드를 다시 짜라는 말에 너무나 슬펐지만... 완성하려면 모... 짜야지... 내가 운영체제에 대한 이해가 깊지 않다보니 process와 pipe를 이해하는데 있어 너무나도 많은 노력이 필요했다. 우선 전체적인 process의 사용방법은 아래와 같다 import multiprocessing from multiprocessing import Process def practice(arg): print('multiprocessing is so hard') p1 = Process(target=practice, args='1') # 프로세스 인스턴스 생성 p1.st.. 2023. 4. 7. 3. 크롤링 코드에 멀티프로세싱 적용하기 (Feat. AWS Lambda & Pool) 오늘의 목표는 크롤링 코드에 멀티프로세싱 적용하기! 기존 코드에 멀티프로세싱을 굳이 적용하는 이유는 AWS Lambda의 타임아웃 리밋이 15분이기 때문. 19000개의 네이버 지하철 시간표 홈페이지에 접속하고 정보를 크롤링, 특정 형식으로 자료를 정리해야 하기 때문에 15분은 굉장히 빠듯한 시간이다. 실제로 Lambda에서 900초 이후 Timeout 에러가 나면서 테스트 실패가 뜨는 현상이 있었음. 어떻게 하면 크롤링 코드를 더 개선할 수 있을까 고민해보았음. 첫번째 방법은 '100에서 20000까지 한 번에 돌리는 것이 아니라 100~10000 / 10001~20000까지 따로 돌려서 결과를 append한다'. 하지만 이것은 도메인? 특성상 하기 힘들었음. 어느 번호에 몇 호선의 어떤 역이 있는지 .. 2023. 4. 3. 1. 크롤링 코드 개선하기 내가 아주 기본적인 토대를 짜고, 그 위에 팀원 분이 아주 멋지게 코드를 짜주어 여차저차해서 크롤링 코드의 초안이 나름대로 완성되었다. 이 코드를 개선하는 과정을 운 좋게 내가 담당하게 되었는데, 그 과정에서 굉장히 많은 고민을 해서 기록을 남긴다. 오류를 해결하기 위해 아이디어를 생각해내는 순간들, 어떻게 하면 더 효율적으로, 더 외부환경에 강건한 크롤러를 만들 수 있을까에 대한 고민을 하는 과정이 너무나 재미있었다. 1. 전체적인 구조 개선 1) 시간표에 접근하는 전략 수정하기: 네이버의 역코드를 알아낼 수 있는 크롤러 별도 제작 (1) 문제 인식 개선 전 코드의 기본 흐름은 아래와 같다 (이미지도 첨부한다) 1) 네이버 모바일 지도에 검색 쿼리를 날린다 2) 가장 위에 있는 검색 결과를 클릭한다 3.. 2023. 3. 31. 0. 크롤링 코드를 짜기 위한 길고 험난한 여정과 깨달음 서울시에서 제공하는 실시간 도착 정보에 모든 열차에 대한 실시간 도착 정보가 있지는 않다. 따라서 실시간 도착 시간 정보 대신, api에서 데이터 베이스 정보가 갱신된 시간과 열차의 원래 도착 예정 시간 등을 계산하여 도착 정보를 구하고자 한다. 그 전에 서울시 지하철 실시간 도착 api는 특정 호선에 대한 정보를 제공해주지 않기 때문에, 네이버에서 제공되는 지하철 도착 시간표를 크롤링하는 것으로 하였다. 이번 주에는 이 지하철 도착 시간표를 크롤링할 수 있는 크롤러를 만드는 것을 목표로 하였다. 그 과정에서 챌린징한 것들이 많아 기록해두려 한다. 챌린지 1: (비교적) 크롤링하기 쉬운 정보 출처 찾기 모바일 버전으로 사이트에 접속하여 '{}호선 {}역'으로 검색을 하면 아래 화면과 같이 지하철 전체 시.. 2023. 2. 28. 이전 1 2 3 4 다음