왜..?이번에 작은 프로젝트를 진행하게 되었는데, 간단하게 말하자면 우리 학교 주변에 있는 맛집을 보여주고 등록할 수 있는 프로젝트다. 이 프로젝트를 할려면 일단 식당에 대한 정보를 데이터베이스에 저장해야됐다. 있긴 한데..https://www.data.go.kr/data/3056779/fileData.do?recommendDataYn=Y
이런 식으로 정보가 너무 부실했다. 최소한 식당 위치를 지도 핀으로 찍고 식당에 대한 정보를 알 수 있도록 식당에 대한 세부정보가 있어야 될텐데 그거조차 존재하지 않았다. 그렇기에 일단 학교 주위에 있는 도로명에 있는 식당들에 대한 데이터를 모아보기로 했다. 일단 학교 주위에 있는 식당에 대한 정보는 얻었는데, 식당에 있는 메뉴나, 평점, 전화번호, 영업시간과 같은 세부정보는 공공데이터 api에 존재하지 않았기 때문에 네이버나 구글 사이트에서 크롤링하는거 이외에는 방법이 없었다. 그래서 식당에 대한 정보가 훨씬 많은 네이버에서 크롤링을 해보기로 했다. 어떤 방식으로 하지..식당에 대해서 가장 잘 나타나있는 사이트가 네이버 지도였다. 이렇게 근처에 있는 식당정보를 보여준다. 그리고 특정 장소 + 식당 이름을 검색하면 거기에 가장 맞는 식당의 정보도 보여준다. 나는 이미 공공데이터에서 학교 주위에 있는 식당의 이름을 알고있었기 때문에 경북대+식당으로 검색해서 나온 결과를 크롤링하는게 효율적이라는 생각이 들었다. 식당이 있는지 확인일단 식당이 폐업했는지 먼저 알아보기 위해서 naver에서 제공하는 검색 api를 사용해보기로 했다. https://developers.naver.com/docs/serviceapi/search/local/local.md#%EC%A7%80%EC%97%AD
하지만 구하고 싶은 식당 메뉴랑 별점,리뷰와 같은 정보는 제공하지 않기 때문에 크롤링을 해서 정보를 가져와야했다ㅠㅠ iframe내에 있는 데이터 크롤링메뉴에 대한 데이터를 가지고 올려면 식당 세부정보를 나타내는 창을 크롤링 했어야 됐는데 아무리해도 메뉴 class를 selector로 해서 tag를 찾으려고 해도 나오지가 않는 것이었다. 그래서 왜 안나오지 하고 부모 태그를 쭉 따라가다보니 iframe내에 document로 이루어져있었다. frame전환을 하고나서 class를 찾았어야됐는데 보지 못했던 것이다.
그래서 이렇게 frame을 바꿔주고 크롤링을 하니 쉽게 됐다. 검색해도 바로 세부정보가 안나오는 경우식당을 검색할 때, 특히, 유명한 체인점과 같은 식당들은 검색을 해도 세부정보 전에 나오는 검색리스트가 뜨는 경우가 있었다. 그래서 세부정보 창이 뜨는거와 상관없이 맨위에 있는 식당의 링크(a tag)를 클릭하고 크롤링을 진행할 수 있도록 코드를 작성했다.
code
result결과는 텍스트로 return했기 때문에 쓰레기 값들도 정리하고, 텍스트를 따로 파싱해서 데이터베이스에 넣어주는 작업을 진행해야한다.
Preprocessing주문수, 2와 같은 쓰레기 값들을 처리해주기 위해 쓸데없는 텍스트를 날리는 코드를 작성했다.
메뉴는 크롤링해왔지만 아직 번호, 리뷰, 평점은 크롤링하지 못한 상태이다. 나머지 작업과정은 다음 포스트에 올릴 예정이다. |