文档章节

http 小爬虫

GZhiDao
 GZhiDao
发布于 2015/12/11 00:15
字数 285
阅读 174
收藏 3
localhost:2015 端口
var http = require('http')

http
    .createServer(function(req, res){
        res.writeHead(200, {'Content-Type':'text/plain'})
        res.write('hello nodejs')
        res.end()
    })
    .listen(2015)

// 获取网页html
// var http = require('http')
// var url = 'http://www.imooc.com/learn/348'

// http.get(url, function(res){
//     var html = ''

//     res.on('data',function(data){
//         html += data
//     })

//     res.on('end',function(){
//         console.log(html)
//     })
// }).on('error', function(){
//     console.log('获取课程数据出错!')
// })
//获取页面的指定内容
//当前目录安装cheerio  -->  npm install cheerio

var http = require('http')
var cheerio = require('cheerio') //引用文件cheerio.js
var url = 'http://www.imooc.com/learn/348'

function filterChapters(html){
    var $ = cheerio.load(html)
    var chapters = $('.learnchapter') //通过class learnchapter /  chapter 拿到每个大章节
       
       var courseData = []

       chapters.each(function(item){ //遍历chapters里面的内容
           var chapter = $(this)
           var chapterTitle = chapter.find('strong').text()  //找到章节里面的strong标签内的内容
           var videos = chapter.find('.video').children('li') //小章节内的li
           var childrenData = {  //创建对象自变量
               chapterTitle: chapterTitle,
               videos: [] //空数组
           }

           videos.each(function(item){
               var video = $(this).find('.studyvideo') //视频class
               var videoTitle = video.text()
               var id = video.attr('href').split('video/')[1]

               childrenData.videos.push({
                   title: videoTitle,
                   id: id
               })
           })
           courseData.push(childrenData)
       })

       return courseData

}

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')
        })
    })
}

http.get(url, function(res){
    var html = ''

    res.on('data',function(data){
        html += data
    })

    res.on('end',function(){
        // console.log(html)
        var courseData = filterChapters(html)
        printCourseInfo(courseData)
    })
}).on('error', function(){
    console.log('获取课程数据出错!')
})


© 著作权归作者所有

共有 人打赏支持
GZhiDao
粉丝 6
博文 119
码字总数 89796
作品 0
广州
前端工程师
加载中

评论(4)

GZhiDao
GZhiDao

引用来自“湖心亭看雪”的评论

引用来自“GZhiDao”的评论

引用来自“湖心亭看雪”的评论

木渴望,node课程:relieved:

有个地方出错了 还没修改

额额,哪里出错了?

获取大章节的class 错了
湖心亭看雪
湖心亭看雪

引用来自“GZhiDao”的评论

引用来自“湖心亭看雪”的评论

木渴望,node课程:relieved:

有个地方出错了 还没修改

额额,哪里出错了?
GZhiDao
GZhiDao

引用来自“湖心亭看雪”的评论

木渴望,node课程:relieved:

有个地方出错了 还没修改
湖心亭看雪
湖心亭看雪
木渴望,node课程:relieved:
大量 python 爬虫源码分享--说说 python 爬虫这件小事

没有爬虫就没有互联网,越来越觉得写 Python 爬虫原来是一件快乐而高兴的事情,以下是本人收集整理的一批 python 爬虫代码,顺便分享到了别的网站上,喜欢的下下来看看吧。 内容: yunpan.3...

赤尔宝丁
2016/05/03
1K
2
网络爬虫引擎 simspider 更新至 v2.4.0

simspider 2.4.0 发布了,改进内容包括: 新增多路复用并发数自动调整机制 新增HTTP请求头自定义专用链表 自动增加Referer请求头选项 完善了主流程框架对事件的响应以提高性能 curl对象复用机...

calvinwilliams
2015/03/13
2.8K
7
scrapyd:基于scrapy的爬虫发布管理工具

最近研究scrapy爬虫框架,在整站爬取上及其方便。但是因为boss的需求比较怪异,需要自动化的最大量不同站点做爬取,而scrapy实现上述功能又不够智能和方便。后来在scrapy文档里发现了scrapyd...

zp2006011242
2017/07/11
0
0
simspider 更新至 v2.3.0,网络爬虫引擎

ver 2.3.0 2015-03-08 calvin 增加错误码SIMSPIDERERRORFUNCPROC_INTERRUPT,回调函数中返回该错误码,爬行过程立即中断 修改函数AppendRequestQueue原型 修改函数SimSpiderGo原型 新增函数S...

calvinwilliams
2015/03/08
922
1
垂直型爬虫架构设计(1)

从事爬虫方向开发马上也将近两年时间了,今天基友问我关于爬虫的架构设计问题.其实这么久也想总结一下自己的整个开发的过程,架构的设计问题..对自己进行一些总结..仅作参考. 1.爬虫的分类 : ...

CainGao
2015/09/14
6.2K
24

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周三乱弹 —— 我居然在 osc 里追剧

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @舆情风控小组 :分享王菲的单曲《笑忘书》 《笑忘书》- 王菲 手机党少年们想听歌,请使劲儿戳(这里) @艾尔库鲁斯:如果给大家一个选择的机...

小小编辑
44分钟前
69
6
rabbitMq的客户端使用笔记

1、channel声明队列的queueDeclare方法的参数解析 durable: 是否持久化, 队列的声明默认是存放到内存中的,如果rabbitmq重启会丢失,如果想重启之后还存在就要使队列持久化,保存到Erlang自...

DemonsI
52分钟前
0
0
“全新” 编程语言 Julia开箱体验

本文共 851字,阅读大约需要 3分钟 ! 概 述 Julia 是一个 “全新”的高性能动态编程语言,前两天迎来了其 1.0 正式版的重大更新。Julia集 Python、C、R、Ruby 之所长,感觉就像一种脚本语言...

CodeSheep
今天
12
0
软件自动化测试初学者忠告

题外话 测试入门 很多受过高等教育的大学生经常问要不要去报测试培训班来入门测试。 答案是否。 高等教育的合格毕业生要具备自学能力,如果你不具备自学能力,要好好地反省一下,为什么自己受...

python测试开发人工智能安全
今天
5
0
java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部