당신은 주제를 찾고 있습니까 “자바 스크립트 크롤링 – Node.js 크롤링 – 인프런 사이트 크롤링하기“? 다음 카테고리의 웹사이트 https://you.charoenmotorcycles.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.charoenmotorcycles.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 개발자의품격 이(가) 작성한 기사에는 조회수 5,506회 및 좋아요 109개 개의 좋아요가 있습니다.
자바 스크립트 크롤링 주제에 대한 동영상 보기
여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!
d여기에서 Node.js 크롤링 – 인프런 사이트 크롤링하기 – 자바 스크립트 크롤링 주제에 대한 세부정보를 참조하세요
[개발자의 품격] 품격있는 개발자 되기!node.js에서 axios, cheerio 모듈을 이용해서 인프런 웹사이트를 크롤링해봅니다.
자바 스크립트 크롤링 주제에 대한 자세한 내용은 여기를 참조하세요.
자바스크립트 크롤링 따라하기 – 아미넴
크롤링을 위한 사전 준비. 이 분야에서는 보통 파이썬(Python)이 많이 쓰인다고 하네요. 아무래도 비전공자들이 사용하기 쉽고 제공하는 라이브러리도 …
Source: sangminem.tistory.com
Date Published: 12/16/2022
View: 2781
[TIL] 자바스크립트로 크롤링 하기 – velog
크롤링 이란? 많은 양의 데이터를 추출하기 위해 데이터를 가져오는 것을 말한다. 2. 필요한 라이브러리. Axios – Axios는 브라우저, Node …
Source: velog.io
Date Published: 5/25/2022
View: 8699
[웹 크롤링] JavaScript로 된 html 불러오기 – 소품집
JavaScript는 객체 기반의 스크립트 언어로 웹 브라우저의 경우 엔진이 인터프리터의 역할을 수행; JavaScript는 HTML 및 CSS와 함께 사용됩니다.
Source: sodayeong.tistory.com
Date Published: 6/7/2021
View: 4934
네이버 뉴스 크롤링 따라하기 – node / request / cheerio / iconv …
자바스크립트, 노드 공부를 목적으로 하는 크롤링 포스트입니다. 크롤러를 만들기 위해 npm 프로젝트를 생성해줍니다. mkdir news-crawler cd …
Source: codingbroker.tistory.com
Date Published: 10/24/2022
View: 646
주제와 관련된 이미지 자바 스크립트 크롤링
주제와 관련된 더 많은 사진을 참조하십시오 Node.js 크롤링 – 인프런 사이트 크롤링하기. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.
주제에 대한 기사 평가 자바 스크립트 크롤링
- Author: 개발자의품격
- Views: 조회수 5,506회
- Likes: 좋아요 109개
- Date Published: 2021. 4. 7.
- Video Url link: https://www.youtube.com/watch?v=xbehh8lWy_A
자바스크립트 크롤링 따라하기
반응형
안녕하세요.
오늘은 번외로 실용적인 내용을 준비했습니다.
목차
크롤링이 필요한 이유
아끼는 대학 후배를 오랜만에 만났는데 한 웹사이트에서 검색을 하여 수백 건에 이르는 결과를 일일이 한 땀 한 땀 엑셀에 붙여넣는 노가다성 작업을 한다면서 힘들어 하더라구요.
그 말을 듣고 제가 가만히 있을 수는 없었죠.
어떻게든 한방에 할 수 있는 방법을 찾아보겠다고 호언장담을 했습니다.
크롤링이란
사실 크롤링이라는 용어는 잘 몰랐는데 들어보니 저는 스크래핑으로 알고 있었던 기술이었어요.
보통 이 두 가지 용어를 혼용해서 쓰는거 같아요.
간단히 말하면 웹페이지 내용을 그대로 읽어와서 원하는 내용을 추출하는 작업인데요.
어떻게 사용하느냐에 따라 굉장히 유용한 결과물을 얻어낼 수 있어 보입니다.
크롤링을 위한 사전 준비
이 분야에서는 보통 파이썬(Python)이 많이 쓰인다고 하네요.
아무래도 비전공자들이 사용하기 쉽고 제공하는 라이브러리도 많은 언어라서 그런거 같아요.
그런데 저는 파이썬을 다뤄 본 적이 많지 않아서 JavaScript를 이용하여 작업을 했습니다.
조만간 파이썬으로도 하는 방법을 정리해서 게시하도록 해볼게요. 🙂
+내용 추가 (2020.09.01)
파이썬 크롤링 모음 이동
약속 지켰습니다 ㅎㅎ
이 내용은 관심있는 분만 보시면 됩니다.
nodeJS 및 필요 모듈 설치
먼저 nodeJS가 필요합니다.
설치 방법을 잘 모르시겠다면
링크를 하나 남겨 놓을테니 참고하시면 되구요.
node js 설치 (on Windows)
서버까지 띄우실 필요는 없어요.
그 다음으로 axios, cheerio 라는 두 가지 모듈은 설치하셔야 됩니다.
터미널 작업할 디렉토리에서 npm 명령어를 이용하여 다음과 같이 입력하세요.
npm i axios cheerio
axios는 URL을 호출하여 웹페이지 HTML을 그대로 가져와 Promise 형태로 반환하는 모듈입니다.
자세한 사항은 아래 참고하시면 되구요.
axios/axios
cheerio는 HTML DOM 형태의 데이터에서 원하는 내용을 쉽게 추출할 수 있게 해주는 기능을 가진 모듈이에요.
더 궁금하신 사항은 아래 링크에서 확인하시면 됩니다.
cheerio
크롤링 코드 작성
이제 코드를 작성해 보겠습니다.
먼저 위에서 설치했던 모듈을 포함하여 아래와 같이 세 가지 모듈을 불러옵니다.
const axios = require(“axios”); const cheerio = require(“cheerio”); const fs = require(‘fs’);
fs는 파일시스템 모듈로 nodeJS 기본 제공 모듈입니다.
텍스트 파일을 읽고 쓰기 위해 사용합니다.
그 다음 필요 전역 변수를 선언해줍니다.
var resultList = []; var cnt = 0;
결과 데이터를 저장할 배열 변수 및 마지막에 파일로 쓰기 위해 카운팅 변수를 하나 선언했습니다.
다음으로 URL을 호출하여 HTML 데이터를 받아오는 함수 하나를 정의합니다.
function delay(ms) { return new Promise(function(resolve, reject) { setTimeout(function(){ resolve(); },ms); }); } function getHTML(url) { return new Promise(resolve=>{ delay(300).then(function() { axios.get(url).then(function(data) { resolve(data); }); }); }) }
axios 모듈을 이용하여 입력받은 URL을 호출하여 HTML 데이터를 그대로 받아오는 기능을 구현했는데요.
여러 건 호출할 경우를 대비하여 0.3초 간격으로 호출되도록 구현하였습니다.
그리고 실습해 볼 샘플 파일을 하나 가져왔습니다.
sample.txt 0.00MB
아래와 같이 크롤링에 필요한 URL 정보가 다수 담겨 있습니다.
이제 본격적으로 메인 함수를 구현하겠습니다.
function main() { fs.readFile(‘sample.txt’,’utf8′,function(err, data){ var allText = data; var list = allText.split(‘
‘); var workList = []; for(var i=1; i
{ let result = {}; const $ = cheerio.load(html.data); result[‘title’] = $(“body”).find(“.search_tit”).text(); result[‘date’] = $(“body”).find(“.tit_loc”).text(); result[‘content_trans’] = $(“body”).find(“.ins_view_pd”).find(“.paragraph”).eq(0).text(); result[‘content_origin’] = $(“body”).find(“.ins_view_pd”).find(“.paragraph”).eq(1).text(); return result; }) } 먼저 workList 배열을 인자로 받는 makeJSON 함수를 만듭니다.
사이트에 직접 들어가 HTML 소스를 분석해 본 결과 제목은 search_tit, 날짜는 tit_loc, 본문 내용은 ins_view_pd 라는 class를 이용하고 있는 것을 확인할 수 있었습니다. 본문은 다시 번역문과 원문으로 나뉘는데 서로 같은 클래스를 이용하고 있어서 인덱스로 구분하였습니다. 그리고 그 안에서 실제 필요한 내용은 다시 paragraph 이름의 class를 가지고 있는 부분이었습니다. 그에 따라 cheerio 모듈을 이용하여 데이터를 분리하였고 JSON 형태로 값을 담았습니다.
이제 결과를 파일로 저장하는 일만 남았습니다.
function makeJSON(workList) { getHTML(workList[cnt]).then(html => { let result = {}; const $ = cheerio.load(html.data); result[‘title’] = $(“body”).find(“.search_tit”).text(); result[‘date’] = $(“body”).find(“.tit_loc”).text(); result[‘content_trans’] = $(“body”).find(“.ins_view_pd”).find(“.paragraph”).eq(0).text(); result[‘content_origin’] = $(“body”).find(“.ins_view_pd”).find(“.paragraph”).eq(1).text(); return result; }) // 추가 작성 .then(res => { cnt++; resultList.push(res); if(workList.length == cnt){ fs.writeFile(‘result_json.txt’, JSON.stringify(resultList), ‘utf8’, function(error){ console.log(‘write end’); }); } else { makeJSON(workList); } console.log(cnt); }); }
호출할 URL이 여러 건인 경우 0.3초 간격으로 제귀 호출이 됩니다.
cnt 변수를 하나씩 증가하면서 작업을 하며 마지막 결과를 받았을 경우 모든 결과를 한 번에 파일로 저장을 하고 작업이 종료됩니다. 이 경우에도 파일 저장에 fs 모듈이 사용되었습니다.
전체 소스
최종 점검을 위해 전체 소스를 제공합니다.
const axios = require(“axios”); const cheerio = require(“cheerio”); const fs = require(‘fs’); var resultList = []; var cnt = 0; function delay(ms) { return new Promise(function(resolve, reject) { setTimeout(function(){ resolve(); },ms); }); } function getHTML(url) { return new Promise(resolve=>{ delay(300).then(function() { axios.get(url).then(function(data) { resolve(data); }); }); }) } function makeJSON(workList) { getHTML(workList[cnt]).then(html => { let result = {}; const $ = cheerio.load(html.data); result[‘title’] = $(“body”).find(“.search_tit”).text(); result[‘date’] = $(“body”).find(“.tit_loc”).text(); result[‘content_trans’] = $(“body”).find(“.ins_view_pd”).find(“.paragraph”).eq(0).text(); result[‘content_origin’] = $(“body”).find(“.ins_view_pd”).find(“.paragraph”).eq(1).text(); return result; }) // 추가 작성 .then(res => { cnt++; resultList.push(res); if(workList.length == cnt){ fs.writeFile(‘result_json.txt’, JSON.stringify(resultList), ‘utf8’, function(error){ console.log(‘write end’); }); } else { makeJSON(workList); } console.log(cnt); }); } function main() { fs.readFile(‘sample.txt’,’utf8′,function(err, data){ var allText = data; var list = allText.split(‘
‘); var workList = []; for(var i=1; i
[TIL] 자바스크립트로 크롤링 하기
지역 문화생활 활성화를 위한 앱 프로젝트중에 공연중인 연극을 홍보한다면 좋을거 같다는 생각이 들었다.
허나 매일 어떤 연극을 하고있나 검색해 넣어줄수는 없는법, 자고로 개발자는 귀찮은 걸 싫어 해야 한다고 했다.
좋은 해결 방법중 하나, 웹 사이트를 크롤링 해주는게 좋다고 생각했다.
크롤링 이란? 필요한 라이브러리
1. 크롤링 이란?
크롤링 이란? 많은 양의 데이터를 추출하기 위해 데이터를 가져오는 것을 말한다.
2. 필요한 라이브러리
Axios – Axios는 브라우저, Node.js를 위한 Promise API를 활용하는 HTTP 비동기 통신 라이브러리입니다. Cheerio – Cheerio 모듈은 그 받아온 페이지를 파싱하여 전체 페이지 중에서 필요한 부분의 정보만을 가져올 수 있다.
3. Example
먼저 세팅과 라이브러리 설치를 해줍니다.
npm init -y npm i –save axios cheerio
연극 목록에서 가져와야 할 데이터의 기준을 정합니다.
저 같은 경우는 ul태그를 기준으로 잡았습니다.
ul class = row1 li div class = list_title < a > ……
ul.row1 의 태그를 찾고 li태그의 데이터를 저장합니다.
title 같은 경우 ul.row1 -> li -> div.list_title -> a 태그 순으로 찾아 저장한 겁니다.
[웹 크롤링] JavaScript로 된 html 불러오기
JavaScript의 이해
JavaScript는 객체 기반의 스크립트 언어로 웹 브라우저의 경우 엔진이 인터프리터의 역할을 수행
JavaScript는 HTML 및 CSS와 함께 사용됩니다. HTML은 웹 페이지의 전체 틀을 잡고, CSS는 개별 요소의 디자인 맡음
JavaScript는 사용자와의 상호작용을 통해 웹 페이지에서 보여주는 콘텐츠를 동적으로 제어함
AJAX와 XHR
AJAX는 JavaScript 라이브러리 중 하나이며, ‘Asynchronous JavaScript And XML'(비동기 JavaScript 및 XML)의 머리글자 입니다. (비동기처리란? 특정 코드의 연산이 끝날 때까지 코드의 실행을 멈추지 않고, 순차적으로 다음 코드를 먼저 실행하는 자바스크립트의 특성. 예를들어 은행은 동기처리, 카페는 비동기 처리)
AJAX는 HTTP 요청 대신 XHR(XHR HTTP Request) 객체를 사용함
AJAX는 웹 서버와의 통신을 통해 JSON 및 XML 형태의 데이터를 주고 받음. 하지만 JSON이 가장 편리하게 사용되는 형태
JavaScript + GET 방식 실습
: Naver Blog Main 실습
https://section.blog.naver.com/BlogHome.nhn?directoryNo=0¤tPage=1&groupId=0
블로그 메인 가져오기
# 필요 패키지 적용 library(httr) library(rvest) library(dplyr) library(tidyverse) #URL 저장 URL <- 'https://section.blog.naver.com/BlogHome.nhn?directoryNo=0¤tPage=1&groupId=0' #httr 요청 res <- GET(url=URL, query=list(directoryNo=0, currentPage=1, groupId=0)) print(res) # 찍어봤을 때 Status가 200이면 응답이 잘 된것. 2. 블로그 제목 추출하기 res %>% read_html() %>% html_nodes(css=’strong.title_post’) %>% html_text()
위를 시행하면, 해당 HTML 요소가 없다는 것을 알 수 있음.
그럼 어떻게 블로그 제목을 추출할 수 있을까요?
네이버 블로그 메인 화면
네이버 블로그 메인 화면으로 접속한 뒤, 네트워크 탭의 Doc로 이동하면 두 개의 파일이 보입니다. 그 중 첫 번째 파일의HTTP를 요청해 볼게요.
XHR에는 여러 개의 파일이 보이는데, 그중에서도 ‘DirectoryPostList.nhn’ 파일이 포스팅 헤드명을 찾아올 수 있을 것 같네요.
여기서 참고해야할 점은, XHR에서 관련 파일을 찾는 방법은 정해져 있는 게 아닌, 개별 파일을 프리뷰로 확인하고 ‘찾는 파일과 관련 되어 있는 가?’를 판단해야 합니다.
자바 스크립트가 사용된 것으로 확인됩니다.
자바 스크립트가 활용된 것을 알았으니 Network→XHR 탭에서 관련 파일을 찾아서 http를 요청할게요.
# http 요청 res <-GET(url='https://section.blog.naver.com/ajax/DirectoryPostList.nhn?directorySeq=0&pageNo=1', query=list(directorySeq='0',pageNo='1')) print(res) 잘못된 요청이라고 뜨네요. 그러면 요청 헤더 중 referer을 추가해볼까요? 요청 헤더 중 referer 추가하기 referer이란? 웹 페이지 간 이동할 때 남는 흔적을 의미함. 하이퍼링크를 통해 어떠 한 사이트에서 다른 사이트로 이동한다고 했을 때, 새로 열린 사이트에이전 사이트의 URI를 전송하는데 이것이 referer HTTP 요청 시, 웹 서버가 요청 헤더에 referer를 요구하는 경우가 있음 Request Headers에서 referer을 찾아 줍니다. HTTP 요청 시 referer 추가하기 referer은 GET() 함수에 add_headers()로 추가할 수 있습니다. res ← GET(url='해당url',add_headers(referer='해당 referer')) # referer를 다시 찾아서 설정 # URL 부분까지만 가져와도 됨!! ref <- 'https://section.blog.naver.com/BlogHome.nhn' res <-GET(url='https://section.blog.naver.com/ajax/DirectoryPostList.nhn', query=list(directorySeq='0', pageNo='1'), add_headers(referer=ref)) print(res) 이번엔 제대로 된 응답을 받은 걸 확인할 수 있었습니다. 그리고 JSON 데이터로 받은 것도 확인할 수 있네요. 그러면 JSON에서 데이터를 추출하면 되는거겠죠? JSON에서 데이터를 추출하는 방식은 다음과 같습니다. key-value 패턴으로 표현되고, 오브젝트를 전달하기 위해 사람이 읽을 수 있는 텍스트를 브라우저/서버 통신에 사용됩니다. JSON에서 데이터 추출하기 JSON 타입은 rvest 함수들을 사용하지 않고 간단하게 처리할 수 있음. fromJSON() 함수만으로 res 객체에 포함된 JSON 데이터를 추출함 리스트 객체로 저장됨= ")]}',"을 제거해야 fromJSON() 함수가 제대로 작동함 json <-res %>% as.character()%>% str_remove(pattern=”\\)\\]\\}\\’,”) %>% fromJSON() blog <-json$result$postList str(blog) 총 100개의 블로그가 제공되며, 한 페이지당 10개씩 수집할 수 있습니다. 페이지를 1~100까지 바꿔가며 데이터를 저장하면 됩니다. 728x90
node / request / cheerio / iconv / 웹크롤러 만들기
자바스크립트, 노드 공부를 목적으로 하는 크롤링 포스트입니다.
크롤러를 만들기 위해 npm 프로젝트를 생성해줍니다.
mkdir news-crawler
cd news-crawler
npm init
request, cheerio, iconv 패키지 설치
npm install request cheerio iconv
루트 폴더에 index.js 파일을 생성해줍니다
touch index.js
코드 편집기 실행
code .
index.js 파일 상단에 필요한 패키지 3가지를 불러옵니다
const request = require(“request”); const cheerio = require(“cheerio”); const iconv = require(“iconv-lite”);
getNews() 함수를 작성하고
node 실행 확인을 위해 콘솔출력 한번
const request = require(“request”); const cheerio = require(“cheerio”); const iconv = require(“iconv-lite”); const getNews = () => { console.log(“getNews function”); }; getNews();
터미널에서 index 파일실행
node index.js
실행결과
콘솔출력 잘 되었습니다.
크롤링 흐름은 다음과 같습니다.
1. request 모듈로 html 가져오기
2. iconv로 디코딩
3. cheerio로 데이터 추출
1. request 모듈로 html 가져오기
데이터를 추출할 네이버 뉴스 페이지 url을 확인합니다.
https://news.naver.com/
위 페이지를 request로 가져옵니다.
deprecated(개발중지) 되었지만 여전히 많이 쓰이는 request 패키지
request( {option} , {handler} )
getNews() 함수에서 request 패키지를 사용합니다.
const getNews = () => { request( { url: “https://news.naver.com/”, method: “GET” }, (error, response, body) => { if (error) { console.error(error); return; } if (response.statusCode === 200) { console.log(“response ok”); // cheerio를 활용하여 body에서 데이터 추출 } } ); };
옵션으로 url과 method를 전달해주고
handler 함수에서 전달받은 응답을 처리해줍니다.
– 에러가 발생하면 콘솔추력 후 handler 종료
if (error) { console.error(error); return; }
– response => ok (응답 http코드 200)이면 다음으로 진행
if (response.statusCode === 200) { console.log(“response ok”); // cheerio를 활용하여 body에서 데이터 추출 }
node실행으로 중간 테스트
node index.js
실행결과
에러 테스트
에러발생 url로 변경 후 재실행
url: “https://news.naver.com1212121212121212/”
node index.js
실행결과
에러 발생.
여기까지 잘 동작합니다.
(테스트후 기존의 유효한 url로 다시 변경해주세요)
크롤링할 부분은 우측의 ‘언론사별 가장 많이 본 뉴스’ 탭입니다.
소스코드 확인을 위해 해당 영역에서
오른쪽 클릭 => n
DOM을 뒤지다보면
id가 _rankingList0인
태그를 찾으실 수 있습니다.
이곳 하위에 있는 5개의
- 태그들이 타겟이 됩니다.
추출 데이터는
- 태그 안에 있는
1. 뉴스글 url
2. 뉴스제목
3. 작성자(언론사)
(아래 <3. cheerio로 데이터 추출>에서 진행합니다.)
2. iconv로 디코딩
cheerio로 데이터 추출 전에
response ok인 상태에서 body를 출력해봅니다.
const getNews = () => { request( { url: “https://news.naver.com/”, method: “GET” }, (error, response, body) => { if (error) { console.error(error); return; } if (response.statusCode === 200) { console.log(“response ok”); console.log(body); } } ); };
node index.js
실행결과 일부
출력되는 안에 깨진 글자들이 다수 보입니다.
타켓 페이지의 charset이 utf-8이 아닌 경우 위와 같은 현상이 발생합니다.
(대부분은 utf-8입니다)
네이버 뉴스 페이지의
태그를 확인해봅니다.charset이 ‘euc-kr’ 이네요.
euc-kr 디코딩을 위해 iconv 패키지를 사용해주면 됩니다.
아래 한줄을 추가해줍니다.
const bodyDecoded = iconv.decode(body, “euc-kr”);
const getNews = () => { request( { url: “https://news.naver.com/”, method: “GET”, encoding: null, }, (error, response, body) => { if (error) { console.error(error); return; } if (response.statusCode === 200) { console.log(“response ok”); const bodyDecoded = iconv.decode(body, “euc-kr”); console.log(bodyDecoded); } } ); };
디코딩된 bodyDecoded를 출력해보면 한글이 정상적으로 출력됩니다.
3. cheerio로 데이터 추출
데이터에 접근하기위해 bodyDecoded를 cheerio 모듈로 load합니다.
const $ = cheerio.load(bodyDecoded);
네이버 뉴스로 돌아가셔서 사이트 DOM을 뒤져보시면
class명 list_text_inner인 div에 필요한 데이터가 모두 담겨있습니다.
(두개의 태그)
는안에
총 5개가 있는데
이 5개의 div를 배열로 받아보겠습니다.
(
내부에 있는
5개의
- 내부
(class – list_text_wrap) 내부(class – list_text) 내부(class – list_text_inner) 태그)
const list_text_inner_arr = $(“#_rankingList0 > li > div > div > div”).toArray();
이해를 돕기 위해 배열 변수명에 클래스명을 붙였습니다.
위 배열의 길이는 5가 됩니다.
list_text_inner_arr.length // 5 /*
……………*/
위 배열을 순회하면서
1. 뉴스글 url
2. 뉴스제목
3. 작성자(언론사)
데이터를 추출해봅니다.
준비 – 루프마다 결과값을 담을 빈 배열 result생성 후 forEach문으로 루프
if (response.statusCode === 200) { console.log(“response ok”); const bodyDecoded = iconv.decode(body, “euc-kr”); const $ = cheerio.load(bodyDecoded); const list_text_inner_arr = $(“#_rankingList0 > li > div > div > div”).toArray(); const result = []; list_text_inner_arr.forEach((div) => { // result에 1. 뉴스글 url / 2. 뉴스제목 / 3. 작성자(언론사) 저장 }); }
첫번째 태그에 접근(aFirst)
list_text_inner_arr.forEach((div) => { const aFirst = $(div).find(“a”).first(); });
list_text_inner_arr.forEach((div) => { const aFirst = $(div).find(“a”).first(); const path = aFirst.attr(“href”); // 첫번째 태그 href const url = `https://news.naver.com/${path}`; // 도메인을 붙인 url 주소 const title = aFirst.text().trim(); // trim으로 공백제거 console.log(url, title) // https://news.naver.com//main/ranking/read.nhn?mode=LSD&mid=shm&sid1=001&oid=437&aid=0000262268&rankingType=RANKING, “나발니, 못 걷는 수준…건강 급격히 악화” });
두번째 태그에 접근(aLast) => author 추출
list_text_inner_arr.forEach((div) => { const aFirst = $(div).find(“a”).first(); const path = aFirst.attr(“href”); // 첫번째 태그 href const url = `https://news.naver.com/${path}`; // 도메인을 붙인 url 주소 const title = aFirst.text().trim(); // trim으로 공백제거 console.log(url, title) // https://news.naver.com//main/ranking/read.nhn?mode=LSD&mid=shm&sid1=001&oid=437&aid=0000262268&rankingType=RANKING, “나발니, 못 걷는 수준…건강 급격히 악화” const aLast = $(div).find(“a”).last(); const author = aLast.text().trim(); console.log(author); // JTBC });
result에 객체형태로 넣어줍니다.
const result = []; list_text_inner_arr.forEach((div) => { const aFirst = $(div).find(“a”).first(); // 첫번째 태그 const path = aFirst.attr(“href”); // 첫번째 태그 url const url = `https://news.naver.com/${path}`; // 도메인을 붙인 url 주소 const title = aFirst.text().trim(); const aLast = $(div).find(“a”).last(); // <두번째(마지막) 태그 const author = aLast.text().trim(); result.push({ url, title, author, }); });
완성 코드
const request = require(“request”); const cheerio = require(“cheerio”); const iconv = require(“iconv-lite”); const getNews = () => { request( { url: “https://news.naver.com/”, method: “GET”, encoding: null, }, (error, response, body) => { if (error) { console.error(error); return; } if (response.statusCode === 200) { console.log(“response ok”); const bodyDecoded = iconv.decode(body, “euc-kr”); const $ = cheerio.load(bodyDecoded); const list_text_inner_arr = $( “#_rankingList0 > li > div > div > div” ).toArray(); const result = []; list_text_inner_arr.forEach((div) => { const aFirst = $(div).find(“a”).first(); // 첫번째 태그 const path = aFirst.attr(“href”); // 첫번째 태그 url const url = `https://news.naver.com/${path}`; // 도메인을 붙인 url 주소 const title = aFirst.text().trim(); const aLast = $(div).find(“a”).last(); // <두번째(마지막) 태그 const author = aLast.text().trim(); result.push({ url, title, author, }); }); console.log(result); } }); }; getNews();
실행결과
반응형
키워드에 대한 정보 자바 스크립트 크롤링
다음은 Bing에서 자바 스크립트 크롤링 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.
이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!
사람들이 주제에 대해 자주 검색하는 키워드 Node.js 크롤링 – 인프런 사이트 크롤링하기
- 자바스크립트
- javascript
- html
- html5
- 웹개발
- 기초
- 웹개발기초
- 자바스크립트 기초
- html 기초
- 자바스크립트 팁
- css
- vue.js
- react
- react.js
- angular
- 안드로이드
- ios
- 제주도
- 디지털노마드
- 소프트웨어
- node.js
- node js
- bootstrap
- 부트스트랩
- flutter
- 플러터
- vue
- 인공지능
- 머신러닝
- 딥러닝
- ai
- 텐서플로우
- tensorflow
- 빅데이터
- big data
- svelte
- sveltejs
- svelte.js
- mariadb
- mongodb
- 크롤링
- crawling
Node.js #크롤링 #- #인프런 #사이트 #크롤링하기
YouTube에서 자바 스크립트 크롤링 주제의 다른 동영상 보기
주제에 대한 기사를 시청해 주셔서 감사합니다 Node.js 크롤링 – 인프런 사이트 크롤링하기 | 자바 스크립트 크롤링, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.