>웹 프론트엔드 >JS 튜토리얼 >node.js 기본 모듈 http, 웹페이지 분석 도구 cherrio는crawler_node.js를 구현합니다.

node.js 기본 모듈 http, 웹페이지 분석 도구 cherrio는crawler_node.js를 구현합니다.

WBOY
WBOY원래의
2016-05-16 15:11:081933검색

1. 서문
크롤러에 대한 예비 탐색이라고 합니다. 실제로는 크롤러와 관련된 타사 라이브러리를 사용하지 않으며 주로 node.js 기본 모듈인 http와 웹페이지 분석 도구인 cherrio를 사용합니다. http를 이용하여 해당 URL 경로에 해당하는 웹페이지 리소스를 직접 얻은 후, cherrio를 이용하여 분석합니다. 여기에는 이해를 돕기 위해 내가 연구한 주요 사례를 입력했습니다. 코딩 과정에서 처음으로 jq로 얻은 객체를 forEach를 사용하여 직접 순회했는데, 이는 jq에 해당 메소드가 없고 js 배열만 호출할 수 있었기 때문입니다.

2. 지식 포인트
①: Superagent는 웹페이지를 캡처하는 도구입니다. 나는 아직 그것을 사용하지 않았습니다.
②: 체리오 웹 분석 도구는 문법이 동일하기 때문에 서버측에서는 jQuery로 이해하시면 됩니다.
렌더링

1. 웹페이지 전체 캡쳐

2. 분석된 데이터, 제공된 예시는 사례 구현 예시입니다.

크롤러 초기 소스코드 분석

var http=require('http');
var cheerio=require('cheerio');
 
var url='http://www.imooc.com/learn/348';
 
/****************************
打印得到的数据结构
[{
 chapterTitle:'',
 videos:[{
  title:'',
  id:''
 }]
}]
********************************/
function printCourseInfo(courseData){
 courseData.forEach(function(item){
  var chapterTitle=item.chapterTitle;
  console.log(chapterTitle+'\n');
  item.videos.forEach(function(video){
   console.log(' 【'+video.id+'】'+video.title+'\n');
  })
 });
}
 
 
/*************
分析从网页里抓取到的数据
**************/
function filterChapter(html){
 var courseData=[];
 
 var $=cheerio.load(html);
 var chapters=$('.chapter');
 chapters.each(function(item){
  var chapter=$(this);
  var chapterTitle=chapter.find('strong').text(); //找到章节标题
  var videos=chapter.find('.video').children('li');
 
  var chapterData={
   chapterTitle:chapterTitle,
   videos:[]
  };
 
  videos.each(function(item){
   var video=$(this).find('.studyvideo');
   var title=video.text();
   var id=video.attr('href').split('/video')[1];
 
   chapterData.videos.push({
    title:title,
    id:id
   })
  })
 
  courseData.push(chapterData);
 });
 
 return courseData;
}
 
http.get(url,function(res){
 var html='';
 
 res.on('data',function(data){
  html+=data;
 })
 
 res.on('end',function(){
  var courseData=filterChapter(html);
  printCourseInfo(courseData);
 })
}).on('error',function(){
 console.log('获取课程数据出错');
})

참고:
https://github.com/ alsotang/node-lessons/tree/master/lesson3

http://www.imooc.com/video/7965

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.