• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

무한 스크롤을 할 때, 새로운 내용이 없을 경우 중단하는 방법이 궁금합니다.

20.11.08 19:17 작성 조회수 215

0

회사에서 사용하는 카카오톡 채널(구 옐로 페이지)의 대화 목록을 크롤링해서

자체 DB로 옮기는 작업을 하고 있는데요,

대화 목록이나 대화 내용을 크롤링 할 때 새로운 내용이 나올 때까지만 자동 스크롤 해서 대화 내용을 받으려고 합니다.

더 이상 스크롤 되지 않을 때까지 스크롤 하는 방법이 있을까요?

답변 3

·

답변을 작성해보세요.

0

대화 내용을 새로 불러올 때마다 Network탭에서 데이터들을 받아오는 것을 발견할 수 있습니다. 스크롤을 올렸는데 더이상 새로운 요청이 감지되지 않거나 응답은 받았는데 내용물(body)가 비어있다면 끝까지 다 불러온 것입니다.

https://github.com/puppeteer/puppeteer/blob/v5.4.1/docs/api.md#pagesetrequestinterceptionvalue

요청을 감지하는 방법은 위 공식문서에 나와있는대로 하시면 됩니다. 그런 다음 page.on('request', 콜백)이나 page.on('response', 콜백)으로 요청과 응답을 검사해서 끝인것 같다면 크롤링을 중단하시면 됩니다.

0

유상준님의 프로필

유상준

질문자

2020.11.11

답변 감사합니다.

제가 표현을 너무 추상적으로 해서 잘 전달이 안된 것 같습니다.

카카오 채널은 현재 대화 내용이 다운로드는 되지 않는데,

카카오 채널 자체의 창을 통해서는 마우스 스크롤 기능으로  위로 쭉 쭉 올려서 과거 대화를 '볼 수만' 있게 되어 있습니다.

이 문제 때문에 고객 상담 내용 중에서 키워드를 검색하고 싶어도 잘 안되는 부분이 있습니다.

이를 해결하기 위해 퍼펫티어를 활용하여 그동안의 대화를 크롤링해서 자체  DB로 옮기려는 것이구요.

따라서 퍼펫티어를 활용하여 '위로 계속 스크롤 해서 첫 대화가 나올 때까지' 스크롤 하면서 역순으로 크롤링 하고자 하는데요,

위로 스크롤을 해서 더 이상 새로운 내용이 ajax로 나타나지 않을 때까지, 즉 첫 대화가 나올 때까지만 반복문을 돌리려고 하는데

'더 이상 새로운 내용이 없다는 것'을 어떻게 감지해서 반복문을 중단시킬 수 있을까 궁금합니다.

0

새로운 내용이라는 것이 끝을 말씀하시는 게 아니라 이미 DB로 이관한 내용을 말씀하시는 거죠?

A라는 채팅 내용이 있으면 그 A에 부여된 고유한 ID또는 시간초 데이터에 접근 가능하신가요? ID라고 해도 정렬되어있어야 합니다.

접근 가능하다면 그 아이디가 나오는지 매번 체크하시면 되고요. 접근 불가능하다면 조금 많이 복잡해집니다.