Node.js(四)【HTTP小爬虫】

HTTP源码解读

HTTP性能测试

 1 var http = require(‘http‘);
 2
 3 http
 4     .createServer(function (request, response) {
 5         response.writeHead(200, {‘Content-type‘: ‘text/plain‘});
 6         response.write(‘Hello Nodejs‘);
 7         response.end();
 8     })
 9     .listen(2016);
10
11 console.log(‘success‘);
12
13 //访问localhost:2016会看到Hello Nodejs的返回

HTTP小爬虫

//安装cheerio
npm install cheerio

/**********************************/

 1 var http = require(‘http‘);
 2 var url = ‘http://www.imooc.com/learn/348‘;
 3
 4 http.get(url, function (response) {
 5     var html = ‘‘;
 6
 7     response.on(‘data‘, function (data) {
 8         html += data;
 9     });
10
11     response.on(‘end‘, function () {
12         console.log(html);
13     });
14 }).on(‘error‘, function () {
15     console.log(‘获取课程数据出错‘);
16 });

/**********************************/

 1 /**
 2  * NodeJs爬虫实例,爬imooc*/
 3
 4 var http = require(‘http‘);
 5 //安装cheerio,并引入进来
 6 var cheerio = require(‘cheerio‘);
 7 var url = ‘http://www.imooc.com/learn/348‘;
 8
 9 function filterChapter(html) {
10     var $ = cheerio.load(html);
11     var chapters = $(‘.chapter‘);
12
13     //[{
14     //    chapterTitle: ‘‘,
15     //    videos: [
16     //        title: ‘‘,
17     //        id: ‘‘
18     //    ]
19     //}]
20
21     var courseData = [];
22
23     chapters.each(function (item) {
24         var chapter = $(this);
25         var chapterTitle = chapter.find(‘strong‘).text();
26         var videos = chapter.find(‘.video‘).children(‘li‘);
27
28         var chapterData = {
29             chapterTitle: chapterTitle,
30             videos: []
31         };
32
33         videos.each(function (item) {
34             var video = $(this).find(‘a‘);
35             var videoTitle = video.text();
36             var id = video.attr(‘href‘);
37
38             chapterData.videos.push({
39                 videoTitle: videoTitle,
40                 id: id
41             });
42         });
43         //console.log(chapterData);
44
45         courseData.push(chapterData);
46     });
47     //console.log(courseData);
48     //console.log(courseData.videos);
49
50     /*courseData.forEach(function (item) {
51         //console.log(item.videos);
52         var videoTitle = item.videos[0].videoTitle;
53         var id = item.videos[0].id;
54         console.log(‘[‘ + id + ‘]‘ + videoTitle);
55     });*/
56
57     return courseData;
58 }
59
60 function printCourseInfo(courseData) {
61     // courseData是一个数组
62     courseData.forEach(function (item) {
63         var chapterTitle = item.chapterTitle;
64         console.log(chapterTitle + ‘\n‘);
65     });
66
67     courseData.forEach(function (item) {
68         var videoTitle = item.videos[0].videoTitle;
69         var id = item.videos[0].id;
70         console.log(‘[‘ + id + ‘]‘ + videoTitle);
71     });
72     //console.log(‘test‘);
73     //console.log(courseData.videos);
74 }
75
76 http.get(url, function (response) {
77     var html = ‘‘;
78
79     response.on(‘data‘, function (data) {
80         html += data;
81     });
82
83     response.on(‘end‘, function () {
84         var courseData = filterChapter(html);
85
86         printCourseInfo(courseData);
87         //console.log(courseData);
88     });
89 }).on(‘error‘, function () {
90     console.log(‘获取课程数据出错‘);
91 });
时间: 2024-11-08 12:56:17

Node.js(四)【HTTP小爬虫】的相关文章

Node.js之网络小爬虫

使用JavaScript在前端访问跨域页面常常用到Ajax,后端Node.js抓取网页信息就容易得多. 下面是一个最简单的例子,抓取我的博客主页信息,显示首页博客标题. 1 var http = require('http') 2 var cheerio = require('cheerio') 3 4 var url = 'http://www.cnblogs.com/feitan/' 5 6 function filterHtml(html) { //使用cheerio处理DOM 7 var

Node.js(九)——HTTP小爬虫

HTTP爬虫 网络上每时每刻都有海量的请求,有从客户端到服务器端的,也有服务器端到服务器端的 一般在浏览器里,我们是通过ajax来完成表单的提交或者是数据的获取, 那在http模块里呢get和request这两个接口来完成数据的获取或者是提交. 来个实例,爬一下51cto博客的数据 先从最简单的爬虫开始,爬源码 示例代码如下: var http = require('http') var url = 'http://mazongfei.blog.51cto.com/3174958/1909817

node.js安装及小例子

1.node.js安装:http://www.nodejs.org/download/ 下载msi版本,直接双击安装,默认在c盘programfiles下,可以进行配置. 2.在某路径下建立test.js文件(本人在D:\nod目录下): 代码: 1 var http = require('http'); 2 http.createServer(function (req, res) { 3 res.writeHead(200, {'Content-Type': 'text/plain'});

[读书笔记]了不起的node.js(四)

这周的学习主要是nodejs的数据库交互上,并使用jade模板一起做了一个用户验证的网站.主要是遇到了一下几个问题. 1.mongodb版本过低 npm ERR! Not compatible with your operating system or architecture: [email protected] 0.9.9只支持linux,darwin,freebsd这几个系统,最新版本已支持wins. 2.nodejs进行insert操作后:无法读取结果 1 app.post('/sign

使用Node.js作为后台进行爬虫

看了一遍又一遍Node.js但是没过多久就又忘了,总想找点东西来练练手,就发现B站首页搜索框旁边的GIF图特别有意思,想着是不是可以写一个小Node.js项目把这些图全部扒下来,于是带着复习.预习与探索的姿态就开始吧~ 步骤记录 爬取目标 B站首页右上角搜索框下面的GIF图片 初步流程图 初步流程图 一开始的想法很单纯,既然 每次刷新首页都会随机得到一张GIF动图,这些动图的url地址都没有规律可循,但我可以不断去请求首页URL并将目标图片的地址和标题扒下来,再次请求图片存在本地就好了,再考虑上

[js高手之路]Node.js实现简易的爬虫-抓取博客所有文章列表信息

抓取目标:就是我自己的博客:http://www.cnblogs.com/ghostwu/ 需要实现的功能: 抓取博客所有的文章标题,超链接,文章摘要,发布时间 需要用到的库: node.js自带的http库 第三方库:cheerio,这个库就是用来处理dom节点的,他的用法几乎跟jquery用法一模一样,所以有了这个利器,写一个爬虫就非常简单 准备工作: 1,npm init --yes 初始化package.json 2,安装cheerio:npm install cheerio --sav

《Node入门》读书笔记——用Node.js开发一个小应用

如需转载请注明出处 http://blog.csdn.net/as645788 Android APP的开发告一段落,一个稳定的.实现了基本功能的APP已经交付用户使用了!我和老板交流了下,接下来准备转战Node.js了,而且一部分前端的功能也要做进去!哈哈哈~~~接下来要朝一个全(zuo)栈(si)工程师进发了,想想都有点小激动呢!这几天一直在学新东西,HTML CSS JavaScript jQuery SQL bootstrap Node.js ··········· (好吧,看着这么多前

Node.js(四)——querystring模块

对url解析的时候,可以用一个querystring把url的query解析成一个对象 在前台还后台开发中遇到的最多的就是参数的处理我们需要传递不同用途的参数追加到url地址中发送给服务器而服务器拿到是一个字符串的参数串不知道个数.参数.参数名 这就需要一个途径需要把参数给一个一个地拎出来放到对象里面 我们可以遍历这个对象也就获取里面的值 在NodeJs中,querystring给我们提供了这个功能 querystring.stringify(obj, [sep], [eq]) 第二个参数就是连

Node.js(十三)——Promise重构爬虫代码

在重构代码之前,先要了解下什么是https? https协议:基于ssl/tls的http协议,所有的数据都是在 ssl/tls协议的封装之上传输的,也就是说https协议是在http协议基础上 添加了ssl/tls握手以及数据加密传输,因此这就是两者之间最大的区别. https模块专门处理加密访问的,区别在于搭建https服务器的时候需要有ssl证书. 模拟搭建https服务器 var https = require('https') var fs = require('fs')//文件系统模

Node.js实现单页面爬虫

在imooc网上跟着老师写了两个爬虫,一个最简单的直接爬整个页面,一个完善版把章节标题和对应编号打出来了. 看完之后,自己也想写一个爬虫,用自己的博客做测试,虽然结果并没有很成功- -,还是把代码放上来. 目标是抓取章节的标题. 博客页面: 对应标签: 页面源代码: 经过分析,我们应该要抓取class=artHead的<div>,往下还有一个没有类的<div>,然后找到它的<h3>标签下子标签<a>的内容,就是章节的名字. 上代码: //引入http模块 v