임의 디텍토리 생성
$npm init -y
모듈 설치
$npm install axios cheerio
crawling.js
const axios = require("axios");
const cheerio = require("cheerio");
const getHTML = async (keyword) => {
try {
return await axios.get("https://www.inflearn.com/courses?s=" + encodeURI(keyword));
} catch (error) {
console.log(error);
}
}
const parsing = async (keyword) => {
const html = await getHTML(keyword);
//console.log(html);
const $ = cheerio.load(html.data);
//jquery 처럼 사용할 수 있음
const $courseList = $(".course_card_item");
let courses = [];
$courseList.each((idx, node) => {
courses.push({
title: $(node).find(".course_title:eq(0)").text(),
instructor: $(node).find(".instructor").text(),
price: $(node).find(".price").text(),
rating: $(node).find(".star_solid").css("width"),
img: $(node).find(".card-image > figure > img").attr("src")
});
});
console.log(courses);
}
parsing("자바스크립트");
출력:
[
{
title: '하루만에 Cypress로 작성하는 자바스크립트 E2E 테스트 코드',
instructor: '메이커준',
price: '₩11,000₩7,700',
rating: '0%',
img: 'https://cdn.inflearn.com/public/courses/327991/cover/e3589cbb-7502-4c72-a665-72ec33d59173/인프런 썸네일.png'
},
{
title: '자바스크립트 제대로 배워볼래?',
instructor: '개발자의 품격',
price: '₩77,000',
rating: '98.23529411764707%',
img: 'https://cdn.inflearn.com/public/courses/326778/cover/fa701aa5-8e85-4c60-8bd0-32be8a67635b/3A9329DD-8AC3-44FA-AEAA-F981219DC5E2.png'
},
{
title: '입문자를 위한 자바스크립트 기초 강의',
instructor: '유노코딩',
price: '₩22,000',
rating: '0%',
img: 'https://cdn.inflearn.com/public/courses/327871/cover/5da57e4f-7cf0-416d-baad-3bf7758eb725/327871-eng.png'
},
{
title: '풀스택을 위한 탄탄한 프런트엔드 부트캠프 (HTML, CSS, 바닐라 자바스크립트 + ES6) [풀스택 Part2]',
instructor: '잔재미코딩',
price: '₩71,500',
rating: '98.125%',
img: 'https://cdn.inflearn.com/public/course-326306-cover/4ea213de-f786-4af1-a9d0-b8932263885a'
},
{
title: '자바스크립트 알고리즘 문제풀이(코딩테스트 대비)',
instructor: '김태원',
price: '₩60,500',
rating: '97.89473684210526%',
img: 'https://cdn.inflearn.com/public/courses/326377/cover/06b7fdbf-e58c-4289-b17d-bffddb67e999'
},
{
title: '자바스크립트 비기너: 튼튼한 기본 만들기',
instructor: '김영보',
price: '₩44,000',
rating: '95.04950495049505%',
img: 'https://cdn.inflearn.com/public/course-324235-cover/12a6aceb-1c38-4ce1-b50c-ab9d32e43edd'
},
{
title: '자바스크립트 머신러닝 TensorFlow.js',
instructor: '김영보',
price: '₩132,000',
rating: '92%',
img: 'https://cdn.inflearn.com/public/courses/324920/course_cover/7e7eb0b1-f56e-422a-b423-0464f1711feb/kyb-tensorFlow.jpg'
},
{
title: '자바스크립트 ES6+ 기본',
instructor: '김영보',
price: '₩55,000',
rating: '96.09756097560975%',
img: 'https://cdn.inflearn.com/public/courses/324642/course_cover/3416cd43-b75d-422d-bc0f-ff6c9388f5ba/kyb_es6.png'
},
{
title: '자바스크립트 중고급: 근본 핵심 이해',
instructor: '김영보',
price: '₩55,000',
rating: '94.32432432432432%',
img: 'https://cdn.inflearn.com/public/courses/324398/course_cover/97632ccf-eed2-4e51-baec-ef3fb81c9b38/kyb_advanced.jpg'
},
{
title: '자바스크립트 언어 기본 - javascript',
instructor: 'Egoing Lee',
price: '무료',
rating: '97.72151898734178%',
img: 'https://cdn.inflearn.com/wp-content/uploads/js.png'
},
{
title: '자바스크립트 ES6+ 심화',
instructor: '김영보',
price: '₩55,000',
rating: '94.44444444444444%',
img: 'https://cdn.inflearn.com/public/course-325633-cover/ececd36d-e3c5-49de-ac84-6bd44b8bb706'
},
{
title: '오픈 소스 자바스크립트 React 프로그래밍 입문 Part.3',
instructor: '유용한IT학습',
price: '₩38,500₩26,950',
rating: '0%',
img: 'https://cdn.inflearn.com/public/courses/328022/cover/896d1cc2-9c2e-4b75-ad58-add567f5d365/328022-eng.png'
},
{
title: '모던 자바스크립트 딥다이브 스터디',
instructor: '정재남',
price: '무료',
rating: '0%',
img: 'https://cdn.inflearn.com/public/courses/327974/cover/3b014384-8b3e-4f66-a4de-a94ffff11f58/Modern Javascript Deep Dive.png'
},
{
title: '자바스크립트 입문자를 위한 강의',
instructor: 'JeongTaeHyun',
price: '₩27,500₩22,000',
rating: '0%',
img: 'https://cdn.inflearn.com/public/courses/326561/cover/77b01d30-3e19-4314-ad6e-4f9282ebfe8a'
},
{
title: '빠르게 배우는 ES6 스킬과 자바스크립트 비동기 프로그래밍',
instructor: '김형태',
price: '₩9,900',
rating: '91.53846153846153%',
img: 'https://cdn.inflearn.com/wp-content/uploads/ES6-1-2.jpg'
},
{
title: '오픈 소스 자바스크립트 React 프로그래밍 입문 Part.2',
instructor: '유용한IT학습',
price: '₩29,700₩20,790',
rating: '0%',
img: 'https://cdn.inflearn.com/public/courses/328021/cover/d2cd7bec-a069-4bbd-a425-ac41c32a9f74/328021-eng.png'
},
{
title: '오픈 소스 자바스크립트 React 프로그래밍 입문 Part.1',
instructor: '유용한IT학습',
price: '₩38,500₩26,950',
rating: '0%',
img: 'https://cdn.inflearn.com/public/courses/328018/cover/fb6c713e-bbfb-4dca-b50f-e71f97cbd313/328018-eng.png'
},
{
title: '함수형 프로그래밍과 JavaScript ES6+',
instructor: '유인동',
price: '₩55,000',
rating: '98%',
img: 'https://cdn.inflearn.com/wp-content/uploads/es6_8.jpg'
},
{
title: '함수형 프로그래밍과 JavaScript ES6+ 응용편',
instructor: '유인동',
price: '₩44,000',
rating: '99.68253968253968%',
img: 'https://cdn.inflearn.com/public/courses/324019/course_cover/9bdc6818-f3d4-49f4-a0bf-1165e3f726b5/es6_2.png'
},
{
title: 'Javascript ES6+ 제대로 알아보기 - 중급',
instructor: '정재남',
price: '₩49,500',
rating: '98.70967741935485%',
img: 'https://cdn.inflearn.com/wp-content/uploads/jjn_es62.jpg'
},
{
title: '실습 UI 개발로 배워보는 순수 javascript 와 VueJS 개발',
instructor: '김정환',
price: '₩44,000',
rating: '95.88235294117646%',
img: 'https://cdn.inflearn.com/wp-content/uploads/vuejsandpure.png'
},
{
title: 'Javascript ES6+ 제대로 알아보기 - 초급',
instructor: '정재남',
price: '₩35,200',
rating: '98.55670103092784%',
img: 'https://cdn.inflearn.com/wp-content/uploads/es6-1.jpg'
},
{
title: '윤재성의 처음시작하는 JavaScript Tutorials',
instructor: '소프트캠퍼스',
price: '₩16,500',
rating: '95%',
img: 'https://cdn.inflearn.com/wp-content/uploads/sc_JS.jpg'
},
{
title: '생활코딩 - JavaScript Immutability',
instructor: 'Egoing Lee',
price: '무료',
rating: '98.82352941176471%',
img: 'https://cdn.inflearn.com/public/courses/324803/course_cover/3cbd8ce1-4bdc-4302-9438-7b53c72bb125/egoing-js-immutability.png'
}
]
Puppeteer - puppeteer 사용법 로그인 후 정보 가져오기
puppeteer에 대한 매뉴얼
https://pptr.dev/#?product=Puppeteer&version=v1.12.2&show=outline
puppeteer로 로그인 후 정보 가져오기
Crawling.js
var express = require('express');
var router = express.Router();
var puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const hisnet_id = 'test@gmail.com';
const hisnet_pw = 'IjmnfesfesfsQ4efeXKtWxa';
//페이지로 가라
await page.goto('http://macaronics.net/index.php/auth');
//아이디랑 비밀번호 란에 값을 넣어라
await page.evaluate((id, pw) => {
document.querySelector('input[name="userid"]').value = id;
document.querySelector('input[name="password"]').value = pw;
}, hisnet_id, hisnet_pw);
//로그인 버튼을 클릭해라
await page.click('.btn-login-submit');
console.log("로그인 버튼을 클릭해라");
//로그인 화면이 전환될 때까지 3초만 기다려라
await page.waitFor(3000);
//로그인 실패시(화면 전환 실패시)
if (page.url() === 'http://macaronics.net/index.php/auth') {
console.log("로그인 실패");
student_id = 'nope';
name = 'nope';
}
//로그인 성공시
else {
console.log("로그인 성공");
//다음 페이지로 가서
await page.goto('http://macaronics.net/index.php/m04/mysql/view/1487');
//post_content 내용을 가져오고
const element1 = await page.$('.post_content');
student_id = await page.evaluate(element1 => element1.textContent, element1);
console.log(student_id);
//small을 가져와라
const element2 = await page.$('.post_date small');
name = await page.evaluate(element2 => element2.textContent, element2);
console.log(name);
/* GET home page. */
router.get('/', function (req, res, next) {
res.render('crawling', { student_id: student_id });
});
}
//브라우저 꺼라
await browser.close();
})();
module.exports = router;
crawling.jade
extends layout
block content
h1= title
p Welcome to1 #{student_id}
.
https://zoomkoding.github.io/web/nodejs/histime/2019/01/24/crawler.html













댓글 ( 5)
댓글 남기기