学习ES6的时候,没少看ES6入门,到现在也就明白了个大概(惭愧脸)。这里不谈ES6,只谈怎么把ES6的页面爬下来放到一起成为一个离线文档。

之前居然没注意过作者把这本书开源了。。瞎耽误功夫。。。地址

通俗易懂_小白friendly_

node 爬虫入门

如果你之前没有用node写过一个爬虫,可以从这篇文章开始。Node.JS 妹子图爬虫(1),除了核心模块外,文章中还用到cheerio这个库来分析访问的页面。cheerio是一个类似于jquery的库,但是运行在node上。而这里主要用到:

node的

  • http模块
  • fs模块
  • ES6promise的一些知识。

show time!

分析要抓的页面路径

这里就放在浏览器上了,当然也可以用http放在后端,F12可以发现,所有链接在一个ol元素里,如图:

所以把所有链接地址存到数组里的代码如下:(在控制台输入)

var links=[];

Array.from($("[start='0'] a")).forEach(function(e){links.push(e.getAttribute("href"))});

JSON.stringfy(links)//便于复制数组

服务端

新建一个js文件。接下来就是陪links玩了。首先我们写出了以下的渣代码,不过还好可以跑


var fs = require('fs'),http = require('http');
var links = ["#README", "#docs/intro", "#docs/let", "#docs/destructuring", "#docs/string", "#docs/regex", "#docs/number", "#docs/array", "#docs/function", "#docs/object", "#docs/symbol", "#docs/set-map", "#docs/proxy", "#docs/reflect", "#docs/promise", "#docs/iterator", "#docs/generator", "#docs/generator-async", "#docs/async", "#docs/class", "#docs/decorator", "#docs/module", "#docs/module-loader", "#docs/style", "#docs/spec", "#docs/arraybuffer", "#docs/simd", "#docs/reference"];
var allInOne = "",
host = "http://es6.ruanyifeng.com/";
var realLinks = links.map(function(link) { return link.slice(1) + '.md' });//迷之reallinks
console.log(links.length);

现在你就可以先在命令行里node getES6了,除了得到数组长度外并没有什么用。

请求

有了原料之后,开始下锅了,我们的构想是,写一个循环来依次请求这些页面,然后把得到的html字符串写到一起:

var allInOne = "",
n = 0;//数数用 for(let link of links) {
n++;
allInOne += getHTML(host + link, n); } }

接下来实现getHtml这个函数:

function getHTML(url, n, id = "body") {
var promise = new Promise(function(resolve, reject) {//不清楚的看http://es6.ruanyifeng.com/#docs/promise
var pageStr = '';//用于放html或md文件
var req = http.get(url, function(res) {//发起请求
res.setEncoding('utf8');
var status = res.statusCode;
if(status == '200') {
res.on('data', function(chunk) {
pageStr += chunk;
}); res.on('end', function(data) {
allInOne += pageStr;
fs.appendFile(`./page/${n}.md`, pageStr, 'utf8', function(e) {//将文件保存到本地的page文件夹下,后缀是md?
console.log(e);
});
console.log(`finish load ${url}`);
resolve();
});
}
});
});
return promise; }

将上面两个个代码片段拼到一起,可以先node ES6跑跑看了,是不是与期望不符?下回再说。

ES6快到碗里来---一个简单的爬虫指南的更多相关文章

  1. python (1)一个简单的爬虫: python 在windows下 创建文件夹并写入文件

    1.一个简单的爬虫:爬取豆瓣的热门电影的信息 写在前面:如何创建本来存在的文件夹并写入 t_path = "d:/py/inn" #本来不存在inn,先定义路径,然后如果不存在,则 ...

  2. Python并发编程-一个简单的爬虫

    一个简单的爬虫 #网页状态码 #200 正常 #404 网页找不到 #502 504 import requests from multiprocessing import Pool def get( ...

  3. python爬虫系列(1)——一个简单的爬虫实例

    本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片. 1. 概述 本文主要实现一个简单的爬虫,目的是从一个百度贴吧页面下载图片.下载图片的步骤如下: 获取网页html文本内容:分析html中 ...

  4. 【转】使用webmagic搭建一个简单的爬虫

    [转]使用webmagic搭建一个简单的爬虫 刚刚接触爬虫,听说webmagic很不错,于是就了解了一下. webmagic的是一个无须配置.便于二次开发的爬虫框架,它提供简单灵活的API,只需少量代 ...

  5. 用node.js从零开始去写一个简单的爬虫

    如果你不会Python语言,正好又是一个node.js小白,看完这篇文章之后,一定会觉得受益匪浅,感受到自己又新get到了一门技能,如何用node.js从零开始去写一个简单的爬虫,十分钟时间就能搞定, ...

  6. nodejs实现一个简单的爬虫

    nodejs是js语言,实现一个爬出非常的方便. 步骤 1. 使用nodejs的request模块,获取目标页面的html代码:https://github.com/request/request 2 ...

  7. 爬虫浅谈一:一个简单c#爬虫程序

    这篇文章只是简单展示一个基于HTTP请求如何抓取数据的文章,如觉得简单的朋友,后续我们再慢慢深入研究探讨. 图1: 如图1,我们工作过程中,无论平台网站还是企业官网,总少不了新闻展示.如某天产品经理跟 ...

  8. 一个简单java爬虫爬取网页中邮箱并保存

    此代码为一十分简单网络爬虫,仅供娱乐之用. java代码如下: package tool; import java.io.BufferedReader; import java.io.File; im ...

  9. Python网络爬虫 - 一个简单的爬虫例子

    下面我们创建一个真正的爬虫例子 爬取我的博客园个人主页首页的推荐文章列表和地址 scrape_home_articles.py from urllib.request import urlopen f ...

随机推荐

  1. C#重点内容之:事件(Event)

    一.事件的五个组成部分 事件的五个部分: 事件拥有者(对象) 事件成员(Event ,成员) 事件的响应者(对象) 事件处理器(成员,本质是一个回调方法) 事件订阅——把事件处理器与事件关联在一起 二 ...

  2. Android拖动和缩放

    拖拽和缩放 多点触控的理论学完了之后,这里开始实践.本节主要介绍使用onTouchEvent()方法处理触控事件. 拖动一个对象 如果你使用的是Android 3.0或者之后的系统,那么你可以使用内置 ...

  3. WebGIS博客文本分析(词频分析)手动扒取 去除格式 词语分割 统计分析

    1.      [置顶](一)开篇—杂谈WebGIS 摘要: 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.前言 ...

  4. bat文件命令

  5. bzoj3262(cdq分治模板)

    裸的cdq,注意去重: #include<iostream> #include<cstdio> #include<cmath> #include<cstrin ...

  6. bzoj 2440 完全平方数 【莫比乌斯函数】

    题目 题意:第Ki 个不是完全平方数的正整数倍的数. 对于一个数t,t以内的数里的非完全平方数倍数的个数:num=1的倍数的数量−一个质数平方数(9,25,49...)的倍数的数量+两个质数的积平方数 ...

  7. ASP.NET Web API 框架研究 ASP.NET Web API 路由

    ASP.NET Web API 核心框架是一个独立的.抽象的消息处理管道,ASP.NET Web API有自己独立的路由系统,是消息处理管道的组成部分,其与ASP.NET路由系统有类似的设计,都能找到 ...

  8. 关于Servlet中GET和POST方法的总结

    JSP.Servlet中get请求和post请求的区别总结   在学习JavaWeb最初的开始阶段,大家都会遇到HttpServlet中的doGet和doPost方法.关于Servlet中get请求和 ...

  9. EBS 定义显示总帐快码设置

    自定义一个功能如下,挂到菜单上就可以了功能 用户功能名 表单 参数GL_GLXDQMLK(自定义) 总帐代码列表 定义代码 VIEW_APPLICATION="SQLGL" HEL ...

  10. Partition--使用分区切换来增加修改列的自增属性

    使用分区来将非自增表改为自增表 ------------------------------------------------- --创建测试表TestTable001和TestTable002 C ...