node.js_crawling

BABY CAT·2022년 9월 26일
0

node.js

목록 보기
5/18

1. crawling

ㄱ. 한빗 사이트 크롤링

사용모듈 2가지
	axios
    	axios.get(url)
    cheerio
    	cheerio.load(response.data)
const axios = require("axios");
const cheerio = require("cheerio");
const url = "https://www.hanbit.co.kr/academy/books/new_book_list.html";

axios.get(url)
   //제대로받앗다면
   .then(response=>{
      //console.log(response.data)     // 해당 url의 html 파일 출력
      //const soup = cheerio.load(response.data);
 //     soup()      //soup==$
      const $ = cheerio.load(response.data);  // 웹사이트를 로드하는 cheerio 오브젝트 선언 
      
      // f12로 찾아가기
      $(".view_box").each((index,element)=>{  //  .클래스  클래스선택자  //뷰박스클래스의 각 인덱스와 엘리먼트를 뽑는다
         
         //뷰박스클래스의 엘리먼트에서 뷰박스클래스 하위에 있는 북tit클래스의 텍스트를 트림하여 title변수로 선언
         let title = $(element).find(".book_tit").text().trim();   //  .클래스  클래스선택자    //trim 여백지우기

         let author = $(element).find(".book_writer").text().trim();  //  .클래스  클래스선택자   //trim 여백지우기
         
         //예쁘게출력하기위한  // 이장수 , 신만수  형태를 이장수,신만수 형태로 정렬한다 
         author = author.split(",").map(x=>x.trim()).join(",");
         console.log(index+1,"====================");
         console.log(title);
         console.log(author);
      });
   })

   //제대로못받앗다면 //에러처리
   .catch(err=>{
      console.log(err);
   });
출력형태

1 ====================
글로벌 시장환경과 국제경영
이장로,신만수,김창수
2 ====================
STEM CookBook, 미래 세상의 모빌리티
임덕신,임현준

ㄴ. 인터파크 크롤링

// 인터파크 베스트 셀러 목록
const axios = require('axios');
const cheerio = require('cheerio');
const iconv = require('iconv-lite');    // npm i iconv-lite

url = 'http://book.interpark.com/display/collectlist.do?_method=BestsellerHourNew201605&bestTp=1&dispNo=028';

axios.get(url, {responseType: 'arraybuffer'}) // 유알엘불러오기

    .then(res => {
        let contentType = res.headers['content-type'];
        console.log(contentType);               // MS949(EUC-KR)
        let charset = contentType.includes('charset=') ? contentType.split('charset=')[1] : 'utf-8';
        let data = iconv.decode(res.data, charset);

        const $ = cheerio.load(data); //cheerio 객체선언 (유알엘객체)

        $('.rankBestContentList > ol > li').each((index, element) => {   // .클래스 선택자   ol 이랑 li는 태그 선택자
            let title = $(element).find('.itemName').text().trim();
            let author = $(element).find('.author').text().trim();
            author = author.split(',').map(x => x.trim()).join(', ');
            let company = $(element).find('.company').text().trim();
            let price = $(element).find('.price > em').text().trim();
            console.log(index+1, '============================================');
            console.log(`제목:\t\t${title}`);
            console.log(`저/역자:\t${author}`);
            console.log(`출판사:\t\t${company}`);
            console.log(`가격:\t\t${price}`);
        });
    })

    .catch(err => {
        console.log(err);
    });

0개의 댓글