node.js抓取并分析网页内容有无特殊内容的js文件


Posted in Javascript onNovember 17, 2015

nodejs获取网页内容绑定data事件,获取到的数据会分几次相应,如果想全局内容匹配,需要等待请求结束,在end结束事件里把累积起来的全局数据进行操作!

举个例子,比如要在页面中找有没有www.baidu.com,不多说了,直接放代码:

//引入模块
var http = require("http"),
fs = require('fs'),
url = require('url');
//写入文件,把结果写入不同的文件
var writeRes = function(p, r) {
   fs.appendFile(p , r, function(err) {
    if(err)
       console.log(err);
    else
       console.log(r);
  });
},
//发请求,并验证内容,把结果写入文件
postHttp = function(arr, num) {
   console.log('第'+num+"条!")
   var a = arr[num].split(" - ");
   if(!a[0] || !a[1]) {
     return;
   }
   var address = url.parse(a[1]),
   options = {
     host : address.host,
     path: address.path,
     hostname : address.hostname,
     method: 'GET',
     headers: {
      'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36'
    }
   }
   var req = http.request(options, function(res) {
     if (res.statusCode == 200) {
        res.setEncoding('UTF-8');
        var data = '';
        res.on('data', function (rd) {  
          data += rd;
        });
        res.on('end', function(q) {
          if(!~data.indexOf("www.baidu.com")) {
             return writeRes('./no2.txt', a[0] + '--' + a[1] + '\n');            
          } else {
             return writeRes('./has2.txt', a[0] + '--' + a[1] + "\n");
          }
        })
     } else {
        writeRes('./error2.txt', a[0] + '--' + a[1] + '--' + res.statusCode + '\n');
     }
   });
   req.on('error', function(e) {
     writeRes('./error2.txt', a[0] + '--' + a[1] + '--' + e + '\n');
   })
   req.end();
},
//读取文件,获取需要抓取的页面
openFile = function(path, coding) {
   fs.readFile(path, coding, function(err, data) {
     var res = data.split("\n");  
     for (var i = 0, rl = res.length; i < rl; i++) {
        if(!res[i])
          continue;
        postHttp(res, i);  
     };  
   })
};
openFile('./sites.log', 'utf-8');

上面代码大家可以看的懂吧,有哪里不清楚的朋友欢迎给我留言,具体的还要靠大家发挥应用到实践当中。

下面给大家介绍Nodejs对于网页抓取的能力

首先PHP。先说优势:网上抓取和解析html的框架一抓一大把,各种工具直接拿来用就行了,比较省心。缺点:首先速度/效率很成问题,有一次下载电影海报的时候,由于是crontab定期执行,也没做优化,开的php进程太多,直接把内存撑爆了。然后语法方面也很拖沓,各种关键字 符号 太多,不够简洁,给人一种没有认真设计过的感觉,写起来很麻烦。

Node.js。优点是效率、效率还是效率,由于网络是异步的,所以基本如同几百个进程并发一样强大,内存和CPU占用非常小,如果没有对抓取来的数据进行复杂的运算加工,那么系统的瓶颈基本就在带宽和写入MySQL等数据库的I/O速度。当然,优点的反面也是缺点,异步网络代表你需要callback,这时候如果业务需求是线性了,比如必须等待上一个页面抓取完成后,拿到数据,才能进行下一个页面的抓取,甚至多层的依赖关系,那就会出现可怕的多层callback!基本这时候,代码结构和逻辑就会一团乱麻。当然可以用Step等流程控制工具解决这些问题。

最后说Python。如果你对效率没有极端的要求,那么推荐用Python!首先,Python的语法很简洁,同样的语句,可以少敲很多次键盘。然后,Python非常适合做数据的处理,比如函数参数的打包解包,列表解析,矩阵处理,非常方便。

Javascript 相关文章推荐
Javascript 写的简单进度条控件
Jan 22 Javascript
JavaScript的各种常见函数定义方法
Sep 16 Javascript
JS基于Mootools实现的个性菜单效果代码
Oct 21 Javascript
jQuery实现的自定义弹出层效果实例详解
Sep 04 Javascript
微信小程序 WebSocket详解及应用
Jan 21 Javascript
微信小程序动态显示项目倒计时效果
Jun 13 Javascript
jQuery实现点击关注和取消功能
Jul 03 jQuery
JavaScript实现修改伪类样式
Nov 27 Javascript
微信小程序实现聊天对话(文本、图片)功能
Jul 06 Javascript
Vue Router去掉url中默认的锚点#
Aug 01 Javascript
JS多个表单数据提交下的serialize()应用实例分析
Aug 27 Javascript
LayUI+Shiro实现动态菜单并记住菜单收展的示例
May 06 Javascript
js全选按钮的实现方法
Nov 17 #Javascript
javascript实现省市区三级联动下拉框菜单
Nov 17 #Javascript
javascript中return,return true,return false三者的用法及区别
Nov 17 #Javascript
jquery表单验证需要做些什么
Nov 17 #Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 #Javascript
jquery验证手机号是否正确实例讲解
Nov 17 #Javascript
跟我学习javascript的prototype使用注意事项
Nov 17 #Javascript
You might like
尽可能写&quot;友好&quot;的&quot;Javascript&quot;代码
2007/01/09 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
2013/11/21 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
JS中使用变量保存arguments对象的方法
2016/06/03 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
2018/08/31 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
浅谈redux, koa, express 中间件实现对比解析
2019/05/23 Javascript
[05:15]2018年度CS GO社区贡献奖-完美盛典
2018/12/16 DOTA
Python程序设计入门(2)变量类型简介
2014/06/16 Python
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
python上selenium的弹框操作实现
2020/07/13 Python
PyCharm中关于安装第三方包的三个建议
2020/09/17 Python
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
C有"按引用传递"吗
2016/09/06 面试题
电信专业毕业生推荐信
2013/11/18 职场文书
高级方案规划工程师岗位职责
2013/11/29 职场文书
商场中秋节广播稿
2014/01/17 职场文书
环保建议书作文
2014/03/12 职场文书
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
2015年党建工作总结
2015/03/30 职场文书
家庭贫困证明
2015/06/16 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
MySQL pt-slave-restart工具的使用简介
2021/04/07 MySQL
Python实现Hash算法
2022/03/18 Python
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers