EventProxy

nodeJs爬取网页数据

六月ゝ 毕业季﹏ 提交于 2020-02-22 13:01:19
发现node可以爬虫,正好我在找暑期实习,然后就使用node爬一下网站数据找实习。 准备工作 安装node,npm安装依赖包[cheerio, express, eventproxy] http 和 express 模块的使用学习 爬取目标网站 //加载http模块 var http = require('http'); //目标网站,嘿嘿,这个网站有很多实习职位 var pageUrl = 'http://shixi.info/'; http.get(pageUrl, function(res) { var html = ''; res.on('data', function(data) { html += data; }); res.on('end', function() { console.log(html); }); }); http的get请求一个目标网站,回调函数的参数是response,绑定两个事件,一个'data'事件,会不断触发获取数据,数据获取完触发’end‘ 事件。 爬到的的数据就是目标网站的html源代码。 现在html代码有了,我们该怎么解析这个呢? 解析html代码 在这里我们使用cheerio模块,是服务器端的html解析模块,使用方法类型jQuery var http = require('http'); var cheerio = require

Nodejs - 如何用 eventproxy 模块控制并发

混江龙づ霸主 提交于 2020-01-20 08:56:53
本文转载自: Nodejs - 如何用 eventproxy 模块控制并发 --------- 韩子迟 本文目标 本文的目标是获取 ZOJ 1001-1010 每道题 best solution 的作者 id ,取得数据后 一次性输出 在控制台。 前文 如何用 Nodejs 分析一个简单页面 我们讲了如何用 Nodejs 简单地对一个页面进行分析,我们再来理一理,温故而知新。首先,我们的目标是能输出在页面上,这时我们就需要 http 模块,或者封装了 http 模块的 express 模块。其次我们需要获取博客园首页的页面代码,就要发送 http 请求,而 superagent 模块正是我们所需要的。最后我们要对获取的页面代码进行分析, cheerio 模块能让我们用类似 jQuery 的语法对页面进行解析,何止一个爽字了得! 实践 再看今天我们的任务,粗看之下,少了输出在页面这个条件(不需要用 http 甚至 express 模块了),而需要输出每道题的 best solution 的作者 id,似乎并不是很难,我们来分析下 1001 这道题的 提交统计页面 ,很显然第一条就是最佳 solution 嘛,我们像前面一样用 SuperAgent 模块请求该页面,然后用 cheerio 模块进行解析,不就大功告成了?!什么,要解析 10 个页面?那就发送 10 次 http 请求喽!

一个前端工程师眼里的NodeJS

亡梦爱人 提交于 2019-12-09 13:29:35
JavaScript单线程的误解   在我接触JavaScript(无论浏览器还是NodeJS)的时间里,总是遇到有朋友有多线程的需求。而在NodeJS方面,有朋友甚至直接说到,NodeJS是单线程的,无法很好的利用多核CPU。   诚然,在前端的浏览器中,由于前端的JavaScript与UI占据同一线程,执行JavaScript确实为UI响应造成了一定程度上的麻烦。但是,除非用到超大的循环语句执行JavaScript,或是用阻塞式的Ajax,或是太过频繁的定时器执行外,JavaScript并没有给前端应用带来明显的问题,所以也很少有朋友抱怨JavaScript是单线程而不能很好利用多核CPU的问题,因为没有因此出现性能瓶颈。   但是,我们可以用Ajax和Web Worker回应这个误解。当Ajax请求发送之后,除非是同步请求,否则其余的JavaScript代码会很快被执行到。在Ajax发送完成,直到接收到响应的这段时间里,这个网络请求并不会阻塞JavaScript的执行,而网络请求已经发生,这是必然的事。那么,答案就很明显了,JavaScript确实是执行在单线程上的,但是,整个Web应用执行的宿主(浏览器)并非以单线程的方式在执行。而Web Worker的诞生,就是直接为了解决JavaScript与UI占用同一线程造成的UI响应问题的

五、nodejs使用 eventproxy 控制并发

僤鯓⒐⒋嵵緔 提交于 2019-12-07 19:35:18
目标 爬取 CNode( https://cnodejs.org/ ) 社区首页的标题和详情页的第一条评论,以及评论的作者,作者积分,最后以json格式打印 步骤 注意:很多网站有并发连接数的限制,所以当请求发送太快的时候会导致返回值为空或报错。 安装依赖 express superagent cheerio eventproxy $ npm install express superagent cheerio eventproxy --save 新建app.js 抓取所有的url // 引入依赖 var express = require('express'); var eventproxy = require('eventproxy'); var superagent = require('superagent'); var cheerio = require('cheerio'); var app = express(); // url 模块是 Node.js 标准库里面的 var url = require('url'); var cnodeUrl = 'https://cnodejs.org/'; app.get('/', function(req, res, next) { // 用 superagent 去抓取 https://cnodejs.org/ 的内容

【NodeJS】爬虫之使用 eventproxy 控制并发

匿名 (未验证) 提交于 2019-12-03 00:21:02
eventproxy 帮你管理到底这些异步操作是否完成 源代码: var eventproxy = require ( 'eventproxy' ); var superagent = require ( 'superagent' ); var cheerio = require ( 'cheerio' ); var url = require ( 'url' ); var cnodeUrl = 'https://cnodejs.org/' ; superagent.get(cnodeUrl) .end( function (err, res) { if (err) { return console.error(err); } var topicUrls = []; var $ = cheerio.load(res.text); $( '#topic_list .topic_title' ).each( function (idx, element) { var $element = $(element); var href = url.resolve(cnodeUrl, $element.attr( 'href' )); topicUrls.push(href); }); var ep = new eventproxy(); ep.after( 'topic_html' ,