본문 바로가기

Node.js/node crawling

노드 크롤링 - userAgent와 한탭으로 크롤링

반응형

 

userAgent는 현재 사용하고있는 브라우저의 정보를 나타낸다.

 

 

const parse = require("csv-parse/lib/sync");
const fs = require("fs");
const stringify = require("csv-stringify/lib/sync");
const puppeteer = require("puppeteer");
console.log(__dirname);
const csv = fs.readFileSync(__dirname + "/csv/data.csv");

//parse 메서드 -> 2차원배열화
const records = parse(csv.toString());
// console.log(records);

const crawler = async () => {
  try {
    const result = [];
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    //본인이 브라우저를 하는것 처럼 진행
    //속이기

    await page.setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36");
    for (const [i, r] of records.entries()) {
      // 페이지가 띄워졌을때
      await page.goto(r[1]);

      console.log(await page.evaluate('navigator.userAgent'));
      //접근
      //  const 태그 핸들러 = await page.${선택자};
      const text = await page.evaluate(() => {
        // 이안에서 document는 사용이 가능하다
        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()];
      }
      // 웹서버가 차단을 하는지 안하는지 테스트 
      await page.waitFor(1000);
    }
    await page.close();
    await browser.close();
    const str = stringify(result);
    fs.writeFileSync("csv/result.csv", str);
  } catch (err) {
    console.log(err);
  }
};

crawler();

 

 

해당 과 같이 브라우저를 setUserAgent로 속일수 있다

 

 

.xlsx 파일로 저장하기 

 

const xlsx = require("xlsx");
const puppeteer = require("puppeteer");
const add_to_sheet = require("./add_to_sheet");

const workbook = xlsx.readFile("xlsx/data.xlsx");
const ws = workbook.Sheets.영화목록;
const records = xlsx.utils.sheet_to_json(ws);

const crawler = async () => {
  try {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    //본인이 브라우저를 하는것 처럼 진행
    //속이기
    await page.setUserAgent(
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"
    );
    add_to_sheet(ws, 'C1', 's', '평점');
    for (const [i, r] of records.entries()) {
      await page.goto(r.링크);
      const text = await page.evaluate(() => {
        const score = document.querySelector('.score.score_left .star_score');
        return score.textContent;
      });
      if (text) {
        const newCell = 'C' + (i + 2);
        console.log(r.제목, '평점', text.trim(), newCell);
        add_to_sheet(ws, newCell, 'n', text.trim());
      }
      await page.waitFor(1000);
    }
    await page.close();
    await browser.close();
    xlsx.writeFile(workbook, 'xlsx/result.xlsx');
  } catch (e) {
    console.error(e);
  }
};
crawler();

 

 

본 글은 아래 인프런 강의를 듣고 작성된 내용입니다

https://www.inflearn.com/course/%ED%81%AC%EB%A1%A4%EB%A7%81

 

Node.js로 웹 크롤링하기 - 인프런 | 강의

네이버, 아마존, 트위터, 유튜브, 페이스북, 인스타그램, unsplash.com 등의 사이트를 크롤링하며 실전에 적용해봅니다., Node.js로 웹 크롤링하기 Node.js와 Puppeteer를 활용해 웹 사이트를 크롤링하여 원

www.inflearn.com

 

반응형