inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Node.js로 웹 크롤링하기

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

410

유상준

작성한 질문수 2

0

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

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

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

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

nodejs 웹-크롤링 javascript puppeteer

답변 3

0

제로초(조현영)

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

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

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

0

유상준

답변 감사합니다.

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

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

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

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

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

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

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

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

0

제로초(조현영)

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

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

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

headless 궁금한게 있어요!

0

413

2

6강 프록시 서버 테스트 관련하여

0

337

2

페이스북 로그인 로그아웃 자동화관련

0

276

2

3-2 axios로 이미지 저장하기에서 axios 관련 오류..

0

269

2

3-1 이미지 다운로드 준비하기 에서 선택자 구성 질문

0

250

3

2-4 csv 출력하기에서 오류 발생

0

294

3

try-puppeteer.appspot.com 을 사용할 수 없나요?

0

149

1

크롬 확장프로그램 관련 질문드립니다.

0

169

1

크롤링 자바스크립트 exe파일

0

553

1

puppeteer 관련

0

598

2

6-3 proxy-database 관련

1

287

1

크롤링을 여러개 돌리려면 어떠한 방법을 선택하는게 좋을까요?

0

793

1

네이버 영화 평점 크롤링 (axis cheerio)

1

487

1

아래 noscript 내용입니다.

0

527

1

크롤링

0

375

1

앱 크롤링

0

1783

1

페이스북 로그인

0

544

1

2019년도 영상이라 error가 나는 걸까요? 2-4. csv에 출력하기에서 error

1

461

1

안녕하세요! for of와 Promise.all 차이점에 관해서 질문드려요!

0

440

2

대량 요청 처리 방법

0

463

1

구글 패스워드 자동입력시 오류

0

247

1

반복크롤링 할 때 아래 질문주신분 하고 약간 형태가 달라요

0

362

2

인스타그램 돔의 value 값으로 쿼리셀렉터 찾을 수 있나요?

0

299

1

페이스북 로그인시 돔이 생성 안되는 문제

0

306

1