뒤로가기뒤로가기

데일리 랩스

비정형 데이터 수집 및 분석 프로젝트

눈 깜빡하면 지나가는 한 달

데일리펀딩

 

? 데일리펀딩에서 인턴으로 출근한 지 벌써 8주 차의 마지막 날이다. 아침에 출근해서 퇴근까지는 굉장히 시간이 안 가는 것 같은데 눈 깜빡하면 일주일이 지나있고 한 달이 지나있다. 현재 진행하고 있는 ‘비정형 데이터 수집 및 분석’프로젝트 안에서 인스타그램 스크래핑을 어떤 식으로 접근하여 구현하고 있는지 간략하게 소개해 보도록 하겠다. 

 

[?스크래핑 구현 시작!]

인스타그램은 React로 구현된 SPA(Single Page Application)여서 처음 스크래핑을 어떻게 해오나 고민이 되었다. 리서치를 하며 Puppeteer라는 Node 라이브러리를 발견했다. 이를 사용하면 직접 Chrome을 구동해 사용자들이 직접 사용하는 환경과 비슷하게 동작하며 확인이 가능해 편리할 것이라고 생각되었다. 페이지를 열고 간단한 함수들을 통해 선택자로 데이터를 가져올 수 있었다. 

 

[? 처음부터 다시!]

라이브러리를 사용하는 것도 괜찮지만 직접 구현을 해보는 게 더 좋을 것 같다는 피드백을 받아 개발자 도구로 인스타그램 페이지를 다시 분석했다. 우리에게 필요한 데이터가 어디서 호출되는지 어떤 형식으로 저장되어 있는지 개발자도구의 네트워크 창을 보며 확인했다. 다음과 같이 콘솔 창에서 API를 호출하면 우리가 생각한 값이 가져와지는지 검사하며 노션에 분석 내용을 정리하였다. 

 

#1 로그인 구현

로그인 요청 URL : https://www.instagram.com/accounts/login/ajax/

요청 메소드: POST

❔ Request 보내기

POST 바디에 넣을 로그인에 필요한 정보는 다음과 같이 만들어 주었다.

이때, PWD는 로그인을 시도하는 시간을 timestamp 형식으로 데이터를 보낸다.

 

세션을 열어 csrftoken을 받아왔고 이를 header에 포함했고 로그인에 필요한 정보는 data로 POST를 보냈다.

❕ Response 결과

ID와 PWD가 맞아 로그인이 성공하면 다음과 같이 authenticated가 true가 된 것을 확인할 수 있다.

 

#2 타겟 유저의 ID 받아오기

로그인 요청 URL : https://www.instagram.com/{타겟유저id}/

요청 메소드: GET

❔ Request 보내기

게시물을 스크래핑해오고 싶은 user의 숫자로 된 고유 id가 필요해 이를 구하기 위해 앞선 로그인에 성공해서 받은 쿠키를 cookies에 담아 get을 보냈다.

❕ Response 결과

엄청난 데이터가 응답으로 돌아오는데 이 중 window._sharedData에 우리가 원하는 정보를 얻을 수 있다. 여기서 id만 뽑아서 따로 저장해 주었다.

 

#3 타겟 유저의 전체 게시글 받아오기 

로그인 요청 URL : https://www.instagram.com/graphql/query/

요청 메소드: GET

❔ Request 보내기

이 API는 쿼리스트링으로 URL이 구성된다. 이에 필요한 매개변수를 함께 보내주어야 하므로 다음과 같이 구성했다. 

 

❕ Response 결과

해당 결과는 너무 커 일부만 잘라왔다. 여기에는 글 내용, 사진, 좋아요 개수, 미리 본 횟수, 게시글에 태그 된 유저와 관련된 데이터(아이디, 프로필 링크, 팔로우 여부) 등 많은 내용이 포함된 것을 확인할 수 있었다.

 

[?10월의 소식]

? 첫 월급을 받았다! 월급날 오매불망 은행 앱 알람이 뜨기만을 기다렸다. 왜 사람들이 월급을 금융치료라고 하는지 실감할 수 있었다. 월급 받은 기념으로 울 집 댕댕이 겨울옷 하나 장만해 줬다. 두리야 누나가 앞으로도 예쁜 옷 많이 사줄게?

? 인간 백신이 되었다. 많은 사람이 2차를 맞고 아프다고 겁을 줘서 연휴를 이용해 후다닥 맞았다. 진짜 너무너무 아팠는데 회사까지 와야 했으면 눈물이 찔끔 났을 것 같다...ㅜㅜ  14일이 지나 이제 걸어 다니는 백신이 되었다ㅎㅎ 인턴이 끝날 때까지 아프지 말고 건강하게 다니는 것이 또 하나의 목표!

? 인턴 동기인 Binnie님과 10월 16일에 기사 실기 시험을 보게 되어 퇴근하고 회사 밑 카페에서 같이 공부를 했다. 원래는 3주 정도 열심히 준비해서 시험을 보려고 했었는데 퇴근을 하고 공부를 한다는 건 정말 어려운 일이었다ㅜㅜ 직장을 다니면서 자기 계발을 하시는 분들에 대한 존경심이 또다시 생기게 되었다. 아마도… 열심히 했으니까 합격하게 해주세요 제발? 

 

우리는 매일 금융의 각을 넓혀가는
데일리언입니다.

데일리언과 함께하기 >