Node.js로 웹 크롤링하기

Node.js로 웹 크롤링하기

(3개의 수강평)

132명의 수강생
55,000원
지식공유자 · 조현영
75회 수업 · 총 12시간 59분 수업
평생 무제한 시청
수료증 발급 강의
수강 난이도 '초급, 중급'
신형준 프로필

선생님, 질문 이어드려요 신형준 5일 전

혹시 댓글에 대한 댓글은 알림이 안가실가봐 새로 써서 질문 이어드려요

실제 해당 현상이 일어나는 url이에요(실제 댓글은 300개가 넘으나 더보기 버튼 2번만 눌러도 더 이상 노출 x, 앱에서는 끝까지 볼 수 있음)

https://www.instagram.com/p/B5WV9wlFNyj/comments/?hl=ko

0
신형준 프로필

댓글 더보기 사라짐 신형준 6일 전

  안녕하세요 선생님, 인스타그램 댓글을 모두 수집해오고싶어서 댓글 더보기를 반복해서 누르게 한 후 댓글을 가져오게끔 했는데 다음과 같은 현상이 있었어요.

1) 크롤러를 돌린게 아니라, 그냥 평범하게 pc웹, 스마트폰 웹으로 열어서 게시글의 댓글들을 더 보려고 할 때, 실제 댓글은 1200개인데 더보기 버튼을 두번만 눌러도 더보기 버튼이 더 이상 노출되지 않아서 댓글을 50~60개정도밖에 보질 못해요.

(하지만 앱으로 보면 더보기 버튼이 사라지지 않고 계속 잘 나옴, 스마트폰 * pc * 크롬 * 익스플로러 웹으로 보면 이런 현상이 있어요.)

* 모든 글들이 그렇진 않고 10개중의 2개 정도의 글이 이런 현상이 있어서 댓글을 전부 가져오질 못해요.

2
신형준 프로필

인터넷 연결이 안돼요 선생님 신형준 11일 전

선생님, proxy 정보를 가져오는거까진 잘되는데, 해당 프록시로 접속하면 인터넷이 되질 않아요

# 가져온 프록시 데이터 

# 프록시 이용하여 브라우저 열기

let proxies = await page.evaluate((proxyClass) => {
			const ips = Array.from(document.querySelectorAll(proxyClass.ip)).map(ip => ip.textContent.replace(/document\.write\(.+\)/, ''));
			const types = Array.from(document.querySelectorAll(proxyClass.type)).slice(5).map(type => type.textContent);
			const speeds = Array.from(document.querySelectorAll(proxyClass.speed)).map(speed => parseFloat(speed.textContent));
			
			return ips.map((ip, index) => {
				return {
					ip: ip,
					type: types[index],
					speed: speeds[index]
				}
			});
		}, proxyClass);
		
		proxies = proxies.filter(proxy => proxy.type.startsWith('HTTP')).sort((a,b) => a.speed - b.speed);
		
		await page.close();
		await browser.close();
		
		console.log(proxies[0]);
		console.log(proxies);
		
		browser = await puppeteer.launch({
			headless: headless,
			args: ["--window-size=1920,1080", '--disable-notifications', "--no-sandbox", `--proxy-server=${proxies[0].ip}`, "--ignore-certificate-errors"]
		});
		
		page = await browser.newPage();
		
		await page.waitFor(1000000);

# 브라우저를 열고 검색한 결과

1
신형준 프로필

Failed to luach chrome 신형준 13일 전

  선생님, herorku라는 배포 서비스를 이용해서 배포 후 실행을 해봤는데 다음과 사진과 같은 에러가 떠요 로컬에선 잘되는데 배포한 버전은 저런 에러가 떠요

Error: Failed to launch chrome!
2019-12-02T03:37:41.850808+00:00 app[web.1]: /app/node_modules/puppeteer/.local-chromium/linux-706915/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory

1
신형준 프로필

선생님 인수가 전달이 안돼요 신형준 19일 전

선생님 아래와 같이 $$eval에 tagClass라는 인수를 전달했는데 전달이 안돼요

await page.$$eval("._77bp", replies => replies.map((reply, tagClass) => { // 자식의 바로 윗부모를 선택해야돼
		const link = tagClass;
		return {link};
}), tagClass);

1
신형준 프로필

$$eval 파라미터 신형준 19일 전

선생님, page.evaluate처럼 $$eval에도 파라미터를 넘겨줄 특별한 방법이 있나요?

1
Choi BG 프로필

아마존 크롤링 로봇 검사 Choi BG 20일 전

처음 수강할 때는 아마존에서 크롤링할 때 이미지 캡차가 안 떴었는데

지금 19.11월 25일 기준으로는 뜨네요..

해결방법이 있나요?

2
신형준 프로필

aws에서 puppeteer lauch 불가 신형준 23일 전

로컬에선 잘만 되는데, aws에 배포하면 puppeteer.lauch가 안되고 다음과 같은 에러가 떠요

1
신형준 프로필

크롤링 시작 신형준 1달 전

선생님 사용자페이지에서 url을 입력한 후에 "크롤링하기" 버튼을 눌렀을 때 크롤링 서버가 그 url을 기반으로 돌아가게 하고싶은데

1) 크롤링 서버에 url을 보내고

2) 크롤링 서버에서 어 지금 url이 왔어 하고 캐치하고 크롤링을 시작하게 어떻게 할 수 있나요?

1
신형준 프로필

반복문 비동기 신형준 1달 전

선생님 반복문이 동기적인데 어떻게 반복문 다 돌고나서 await page.close()가 돌아가는거에요? 원리를 잘 모르겠어요

1
신형준 프로필

클래스로 셀렉트 신형준 1달 전

선생님 id가 아니라 클래스 선택자로 가져와도 배열로 들어오지 않고 딱 하나씩만 가져와지는건가요?

1
신형준 프로필

사이트에서 입력 받기 신형준 1달 전

선생님 크롤링할 url을 csv나 엑셀파일을 받는게 아니라

사용자가 사이트를 열고, "크롤링할 url을 입력해주세요" input에 url을 입력 후 "크롤링하기" 버튼을 누르면 그 사이트에서 크롤링한 데이터를 사이트에 바로 뿌려주길 원하는데 이럴 경우 어떻게 해야하나요?

1
신형준 프로필

리액트 프로젝트에서는 어떻게 사용하나요 신형준 1달 전

컴포넌트 내에 코드를 작성하니까 Cannot read property 'call' of undefined(구글링 해보니까 puppetier.launch가 안되는거래요)가 떠요.

1
신형준 프로필

Cannot find module 'ws' 신형준 1달 전

윈도우를 사용하는데

Cannot find module 'ws'라는 에러가 떠요

Uncaught Error: Cannot find module 'ws'

    at webpackMissingModule (app.js:49782)

    at Object../node_modules/puppeteer/lib/WebSocketTransport.js (app.js:49782)

1
신형준 프로필

크롤링 법적 문제 신형준 1달 전

선생님, 인스타그램에 제가 올린 글에 대한 댓글들을 긁어오려고 하는데 제 글에 대한 크롤링도 법적 문제가 생길 수 있나요?

목적) 제가 초성퀴즈 이벤트글을 올린 후 댓글에 정답을 달아달라고 한 후에 댓글들을 취합해 정답자들을 가려내려고 해요.

1
지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스