学习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. js parseInt函数

    在代码中,用到数字的地方,如果是字符串,需要将字符串转化为数字型. 1.使用parseInt(string,radix),将整数类型的字符串变为整型,radix表示以什么样的基数来解析字符串,通常是1 ...

  2. C#读取配置文件app.config

    应用程序配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的.它是可以按需要更改的,开发人员可以使用配置文件来更改设置,而不必重编译应用程序.配置文件的根节点是configuration. ...

  3. hihocoder#1631 : Cats and Fish

    Description There are many homeless cats in PKU campus. They are all happy because the students in t ...

  4. 跟哥走,带你玩转Surface 2

    以为自己是数码控?觉得自己买了Surface就无所不能?别逗了!来看哥怎么玩平板,也让你们这些小虾米看看,什么才叫“玩转”! 新技能Get:密码不在用键盘 什么?每次开机你还要输入一长串密码?都什么年 ...

  5. 18、标准IO库详解及实例

    标准IO库是由Dennis Ritchie于1975年左右编写的,它是Mike Lestbain写的可移植IO库的主要修改版本,2010年以后, 标准IO库几乎没有进行什么修改.标准IO库处理了很多细 ...

  6. 两个jsp文件运行后弹出对话框 下载文件问题

    这个问题是两个jsp字符编码不一致的问题 如图所示 划线部分是要特别注意的地方 出错往往是这里 有时是“;”后面有无空格 如果login.jsp有 那么loginCheck.jsp也必须要有而且是同样 ...

  7. Scala_特质

    特质 特质概述 Java中提供了接口,允许一个类实现任意数量的接口 在Scala中没有接口的概念,而是提供了“特质(trait) ”,它不仅实 现了接口的功能,还具备了很多其他的特性 Scala的特质 ...

  8. [auto-download-app] 如何使用 javascript 实现 app 自动下载

    // 在访客跳转进入的页面中,执行下面使用下面 invoke function (function(){ var str_downloadUrl = "<!--{$apkUrl}--& ...

  9. cxGrid的FilterRow默认自动匹配左边%而不是右边%

    /==============================================================================// 修改cxGrid的FilterRow ...

  10. MVC所有的ActionResult

    一.所有的Controller都继承自System.Web.Mvc.Controller 目前ASP.NET MVC3默认提供了多种ActionResult的实现,在System.Web.Mvc命名空 ...