inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Node.js로 웹 크롤링하기

2장 useragent를 이용하여 한탭으로 크롤링

307

맑은맑쇼

작성한 질문수 25

0

안녕하세요! 혹시 강의 예제 진행하던 중 다른 웹페이지로 접속되는 현상이 발생되어 질문드립니다.

강의에서 처럼 콘솔로 확인한 저의 useragent를 복붙하여 한탭에서 영화평점을 크롤링하도록 하였는데 앞선 예제들과는 달리 밑 사진 웹페이지로 접속하게됩니다. csv파일도 이전과 동일한 csv파일을 이용하였는데 

무엇이 문제인가요?

nodejs puppeteer 웹-크롤링 javascript

답변 2

0

맑은맑쇼

const parse = require("csv-parse/lib/sync");
const stringify = require("csv-stringify/lib/sync");
const fs = require("fs");
const puppeteer = require("puppeteer");

const csv = fs.readFileSync("csv/data.csv");
const records = parse(csv.toString("utf-8"));
//csv의 형식이 버퍼(0,1로 이루어진 컴퓨터 친화적인 데이터)임 > 문자열로 바꿈
//csv-parse의 parse메서드가 문자열을 2차원 배열로 바꿔줌

const crawler = async () => {
    try{
        const result = [];
        const browser =  await puppeteer.launch({headless : false});
        const page = await browser.newPage(); 
        //사람은 보통 한페이지를 열어서 다음페이지 감 (봇이 아닌 작업)
        
        await page.setUserAgent("Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Mobile Safari/537.36");
        //나의 크롬브라우저로 접속한것처럼 사랑흉내를 냄(navigator.userAgent로확인!)  
        
        //그래서 10번을 넘나듬
        for(const [i,rof records.entries()){ 
            await page.goto(r[1]);
            
            console.log(await page.evaluate("navigator.userAgent"));
            
            const text = await page.evaluate(()=>//개중요!!!!!!!!!!!!!!!!! evaluate를 받음!!!!!!!!!!!!!!
                const score = document.querySelector(".score.score_left .star_score");

                if(score){
                       return score.textContent;
                }
            });
                
            if(text){
                console.log(r[0],"평점",text.trim());
                result[i] = [r[0],r[1],text.trim()]; //result[i] async(i)를 통해 순서대로 2차원배열생성!!
            }

            await page.waitForTimeout(2000); //어떤 웹에서 자동화작업을 막을수도있으므로 시간차!!           
        }
        await page.close();
        await browser.close();
        const str = stringify(result);
        fs.writeFileSync("csv/result.csv",str);
        //csv-stringify의 stringify메서드가 2차원배열을 다시 문자열로 바꿔줌

    }catch(e){
        console.error(e);
    }
    
};

crawler();

0

맑은맑쇼

웹페이지가 기존 csv파일에 있는 링크와 다르게 접속되는이유가 useragent때문인가요?

0

제로초(조현영)

음... 해보니 저는 잘 되네요. 코드 올려주세요. 그리고 저 페이지로 간다고 하더라도 저 페이지에서 다시 정보를 크롤링하면 되겠죠?

headless 궁금한게 있어요!

0

409

2

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

0

337

2

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

0

275

2

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

0

269

2

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

0

250

3

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

0

293

3

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

0

148

1

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

0

169

1

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

0

552

1

puppeteer 관련

0

598

2

6-3 proxy-database 관련

1

287

1

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

0

792

1

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

1

487

1

아래 noscript 내용입니다.

0

527

1

크롤링

0

374

1

앱 크롤링

0

1783

1

페이스북 로그인

0

543

1

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

1

461

1

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

0

440

2

대량 요청 처리 방법

0

463

1

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

0

245

1

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

0

359

2

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

0

295

1

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

0

304

1