博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ES6快到碗里来---一个简单的爬虫指南
阅读量:4625 次
发布时间:2019-06-09

本文共 2425 字,大约阅读时间需要 8 分钟。

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

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

通俗易懂_小白friendly_

node 爬虫入门

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

node的

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

show time!

分析要抓的页面路径

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

1016471-20170317215623276-1063759418.png

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

var links=[];Array.from($("[start='0'] a")).forEach(function(e){links.push(e.getAttribute("href"))});JSON.stringfy(links)//便于复制数组

1016471-20170317220103932-1093404518.png

服务端

新建一个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' });//迷之reallinksconsole.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跑跑看了,是不是与期望不符?下回再说。

转载于:https://www.cnblogs.com/imgss/p/6562174.html

你可能感兴趣的文章
经典案例复盘——运维专家讲述如何实现K8S落地
查看>>
【HTML5】---【HTML5提供的一些新的标签用法以及和HTML 4的区别】
查看>>
添加sudo命令
查看>>
策略模式,我与你的三次相遇。
查看>>
43左旋转字符串+三步反转法
查看>>
CTF线下赛AWD模式下的生存技巧
查看>>
我的思想境界
查看>>
QML与C++交互:在qml中使用QSqlQueryModel显示数据库数据
查看>>
在VM已安装Android4.4 连接小米手环 网络设置
查看>>
HDU4939Stupid Tower Defense (有思想的dp)
查看>>
原生ajax
查看>>
图像腐蚀与图像膨胀(18)
查看>>
NSlog 对于新手的一点技巧和用法.
查看>>
eclipse项目中出项红色的叹号(!)和当运行时找不到主类或者是无法加载主类...
查看>>
第六章小结
查看>>
C++中使用模板template递归函数
查看>>
Check the string
查看>>
DFS中的奇偶剪枝(技巧)
查看>>
dos命令的使用
查看>>
Android中微信抢红包助手的实现
查看>>