<aside> 💡 이미 인터넷에 있는 픽 형태의 링크 모음을 피큐레잇의 픽 형태로 만드는 일련의 과정을 자동화 및 크롤러를 활용하여 인터넷에 존재하고 있는 수많은 링크모음을 픽으로 만들기 위한 프로젝트 입니다.
</aside>
목표: 디아블로 레저렉션 관련 공략 링크를 저장한 블로그를 찾아 크롤링 후에 픽으로 만든다.
과정
크롤링을 진행할 타켓 페이지 수집
디아블로 레저렉션 공략에 해당하는 링크모음을 저장한 URL을 저장한다.
타켓 페이지의 구조 파악 후 크롤링 진행
타겟 페이지에서 링크 외에 픽의 제목, 카테고리, 메모에 해당하는 구성 요소와 태그(html)을 파악후에 크롤링 코드를 작성한다.
링크 내의 내용 분석
크롤링을 위한 html 태그 파악
클롤링 이후 픽의 퀄리티를 높이기 수작업
다속 적합하지 않은 메모, 카테고리 이름, 카테고리 순서를 알맞게 바꾸는 작업
결과
인벤, 다양한 블로그에서 수집한 링크 총 409개, 픽은 약 10~20개 사이가 되었다. 기본적으로 각 블로그 마다 태그의 배치가 다르고, 심지어 같은 블로그에서도 사용자가 어떻게 링크모음을 작성했냐에 따라서 크롤링 코드가 달라지는 문제가 발생
→ 각 사이트에 해당하는 전용 크롤러를 만들어 각 페이지 마다 태그를 수동으로 바꿔가며 크롤링을 해야 했다.
→ 속도면에서도 좋지 않은 방법이었고, 또한 추가적인 퀄리티 유지를 위해 사람이 직접 추가 작업을 해야한다는 문제가 있었다.
과정
데이터를 모을 자료가 되는 사이트를 탐색한다.
데이터를 모을 자료: 지역별 맛집 리스트, 지역별 여행지
자료가 되는 사이트: 망고플레이트, 트립어드바이저
타겟 사이트에서 데이터 1차 크롤링
망고플레이트에서 지역별 맛집 데이터 추출
지역별 맛집 데이터에 따른 2차 크롤링
2번에서 추출한 데이터(맛집 이름, 여행지 이름)를 네이버 블로그, 구글, 다음에 걸처서 상위 n개의 링크를 크롤링한다.
관련 자료 픽으로 덤핑
데이터를 JSON형식으로 정리하여 pikurate api를 이용해서 픽 덤핑
결과
디아블로에 비해선 많은 링크를 생상할 수 있지만, 그만큼 퀄리티 컨트롤이 힘들다. 또한 검색어를 바탕으로 크롤링을 해야하기 때문에, 브라우저를 띄우는 프로그램을 사용(selenium, scrapy+ splash) 해야하며 이는 크롤링 속도가 느려지는 단점이 있다. 또한 가장 다양한 데이터가 존재하는 구글의 경우는 크롤링에 대한 기준이 매우 엄격하기 때문에 딜레이를 2초 정도 걸어주어야 하기 때문에 이는 크롤링 시간이 급격하게 증가하는 원인으로 작용하였다.
또한 대부분의 데이터가 네이버 블로그, 티스토리와 같은 메인 블로그 이름에 국한된다는 것도 픽의 퀄리티를 떨어뜨린다고 할 수 있다.
검색어를 픽으로 만들게 되면 메모를 선정하기 위해서 수집한 링크를 다시 크롤링해서 오픈그래프의 디스크립션을 수집해야 하는데, 이러한 메모들은 퀄리티가 떨어지고 크롤링의 복잡도 및 시간을 증가 시킨다는 점에서 메모는 맛집 위치 + 이름으로 지정하였다.
크롤러의 한계
구글의 경우 아이피를 우회하거나 프록시 풀을 이용하지 않는한 빠른 속도록 크롤링을 수행할 수 없다. 위의 맛집의 경우는 딜레이를 약 2초간 진행하여 크롤링을 진행하였다. 또한 수많은 반복 요청이 구글의 기준을 넘어갈 경우 캡차를 이용하여 크롤링을 막아버린다.
블로그에 저장된 링크모음 구조의 다양성
링크모음은 개인 블로그에 자주 나타나는데, 사람마다 링크모음을 만드는 방식에서 차이를 발견할 수 있었으며, 이와 더불어 각 블로그 주소에서 지원하는 html 태그 방식 또한 크롤링의 과정을 난해하게 만들었다.
크롤링의 효율성-픽의 퀄리티
지금까지의 내용을 정리하면 다음과 같이 그래프로 정리할 수 있을 것이다.
그래프의 기울기보단 양상에 초점을 맞추도록 하자
디아블로 픽의 경우는 심지어 카테고리의 배치, 제목 변경과 같은 실제 사람의 수작업이 들어가기도 한 픽으로 이름만 크롤링일뿐 , 수작업과 맞먹는 노력이 필요하였다. 그에 비해 맛집/여행지의 경우는 수작업이 들어가지 않았지만 단순한 양상의 링크(네이버블로그, 티스토리)와 단순한 카테고리(지역이름), 메모를 가지는 픽을 단순 덤핑할 뿐이었다.