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 > node crawling' 카테고리의 다른 글
노드 크롤링 - 브라우저 사이즈 조절 및 스크린샷 찍기 (0) | 2020.08.16 |
---|---|
노드 크롤링 - axios를 활용해서 이미지를 다운로드 하기 (0) | 2020.08.16 |
노드 크롤링 - puppeteer의 다양한 기능들 (0) | 2020.08.15 |
노드 크롤링 - csv에 있는 주소를 통해 puppeteer 크롤링, csv파일 작성하기 (0) | 2020.08.15 |
노드 크롤링 - puppeteer 사용해보기 (0) | 2020.08.15 |