카테고리 없음

크롤링 구체화 하는 것에 대해서 정리

민초왕 2024. 12. 1. 13:50

이제 어느정도 웬만한 크롤링을 하는데 오래걸리지 않는다.

 

오늘 음식점 메뉴를 크롤링 하는데 참고해야할 것들을 정리를 해보겠다.

1. 내가 어떤 것을 크롤링할 건지 파악

2. 음식점을 크롤링할 것이니 어디서 크롤링을할 것인지 사이트를 파악

https://m.place.naver.com/restaurant/1652665554/home

이 사이트를 예시로 들면 뒤에는 home이 있다. 홈에서 메뉴를 클릭하게 되면

https://m.place.naver.com/restaurant/1652665554/menu/list

라고한다. 즉 만약 들어가서 메뉴를 클릭하는 것 보다 미리 메뉴에 들어간채 시작하는 것이 더 빠르다.

그리고 각 음식점마다 1652665554 처럼 고유 아이디 값이 있다. 그래서 음식점을 cell에서 끌어와 검색하는 것보다,

검색을 통해서 고유 아이디를 모두 수집한 후에 링크에다가 아이디 값을 넣는 것이 더 유용하고 안정적이다.

3. 제일 먼저 수집할 기능을 구현

제일먼저 이미지를 크롤링할거면 먼저 이미지를 수집하는 기능을 구현한다.

4. 부가적인 기능들 구현

만약 더보기 기능이 있어야하면 더보기를 클릭하는 기능을 추가해야하고, 스크롤을 내려야 뜬다면 스크롤 기능과 로딩이 제대로 될 수 있도록 시간값도 줘야한다.

5. 구현 마무리

그럼 이제 기능으로는 모두 끝났다면, 이제 어떻게 어떤 행과 열에다가 어떤 방식으로 저장할 것이고 uft-8로 어떤 파일을 어느 열과 어떤 시트를 읽을 것인지 등을 고려해서 마무리 하면된다.

그리고 데이터를 실시간으로 수집후 저장하는 것이 중간에 중단되더라도 데이터가 남아있다.

6. 중간점검

이렇게 해서 데이터가 모두 수집되었다고 안도하면 큰일이다. 왜냐하면 어디서나 변수는 존재한다. 왜냐하면 어떤 식당에서는 음식점 메뉴가 없는 경우도 있고, 어떤 경우에서는 주메뉴리스트, 사이드메뉴, 음료 등등 여러 리스트로 나누는 경우도 있고 class값이 달라질 수도 있기 때문에 작업중 중단 되는경우가 매우 많다. 그리고 처리량이 많으면 응답속도떄문에 멈추곤 한다.

그래서 터미널을 통해 어디까지 진행되어있는지 출력해주는 것도 유용하다. 그러면 중단된 부분에서 class문제인지 확인이 가능해진다.

끝! 이렇게 오류가 나면 나중에 찾아보면 된다.

 

아 그리고 추가적으로 이건 꿀팁인데 cell파일을 csv로 저장해서 utf-8로 읽으면 파일꺠지는 경우가 많다. 그래서 인코딩을 cp949로 하는경우 가많은데 그냥 csv파일 말고 xlsx로 저장하는게 건강에 유익하다.