라이브러리 설치
npm install axios
npm install cheerio
=> axios : 웹 사이트에 HTTP 요청을 보내고 응답을 받아오는 데 사용.
=> cheerio : 웹 페이지의 HTML 요소를 쉽게 파싱하고 조작할 수 있는 라이브러리
코드 설명
export default function Home() {
// 필요한 라이브러리 가져오기
const axios = require("axios");
const cheerio = require("cheerio");
// 알라딘 베스트셀러 페이지 URL
const aladinBestSellerURL = "https://www.aladin.co.kr/shop/common/wbest.aspx";
// axios HTTP 요청
axios
.get(aladinBestSellerURL)
.then((response) => {
// 요청 결과 상태가 정상일 경우
if (response.status === 200) {
// HTML 데이터 변수
const html = response.data;
// cheerio를 사용하여 HTML 데이터를 분석 및 추출하기 쉽도록 처리
const $ = cheerio.load(html);
// 베스트셀러 책 정보를 저장할 배열
const bestSellers = [];
// 각 베스트셀러 책 아이템에 대해 작업
$(".ss_book_box").each((index, element) => {
// 책 제목 추출
const title = $(element).find(".bo3 > b").text();
// 저자 추출
const author = $(element)
.find(".ss_book_list ul li:eq(2) > a:eq(0)")
.text();
// 이미지 추출
let imageUrl = $(element).find(".front_cover").attr("src");
// 추출한 정보를 배열에 추가
bestSellers.push({ index: index + 1, title, author, imageUrl, });
});
// 베스트셀러 목록 출력
console.log("알라딘 베스트셀러 목록:");
bestSellers.forEach((book) => {
console.log(`${book.index}. ${book.title} | ${book.author}`);
console.log(`${book.imageUrl}`);
});
}
})
// 에러 처리: 크롤링 도중 에러가 발생한 경우
.catch((error) => {
console.error("크롤링 도중 에러 발생:", error);
});
return <div></div>;
}
알라딘의 베스트셀러 홈페이지의 html 태그를 추출하여 크롤링 한 코드이다.
=> 간단하게 1. 책제목, 2. 저자, 3. 이미지를 출력하였다.
책제목 크롤링
=> $(".ss_book_box").each((index, element)
class명이 ss_book_box인 태그를 반복해서 탐색한다는 의미.
=> const title = $(element). find(". bo3 > b"). text();
class명이 bo3인 텍스트를 추출하겠다는 의미.
저자 크롤링
=> let author = $(element). find(". ss_book_list ul li:eq(2) > a:eq(0)"). text();
class명이 ss_book_list인 요소를 찾고, ul태그의 요소 중,
index [2] 번째 li태그를 찾고, index [0] 번째 a태그의 텍스트를 추출하겠다는 의미.
이미지 크롤링
=> let imageUrl = $(element). find(". front_cover"). attr("src");
class명이 front_cover인 요소를 찾고, src 속성값을 추출하겠다는 의미.
크롤링 결과
=> 원하는 대로 잘 출력된 것을 볼 수 있다.
크롤링이나 웹 스크래핑은 파이썬으로만 할 수 있는 줄 알았는데,
node.js로도 충분히 할 수 있다는 것을 알았다.
장단점으로는 파이썬은 지원하는 라이브러리가 많다는 점?
node.js도 비동기처리 부분에서는 장점을 가지고 있어서 그 부분만큼은 우위를 가지고 있으니,
상황에 따라 원하는 언어로 크롤링을 하면 될 것이라는 결론이다!
이 밖에도 Puppeteer라는 라이브러리도 있는데, 페이지 처리 및 대기 시간도 제어할 수 있고,
사용자의 이벤트를 받는 동적인 웹 페이지까지 크롤링이 가능하다.