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 相关文章推荐
Js 订制自己的AlertBox(信息提示框)
Jan 09 Javascript
JavaScript获取GridView选择的行内容
Apr 14 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
May 26 Javascript
javascript 数据类型转换(parseInt,parseFloat)
Jul 20 Javascript
神奇的7个jQuery 3D插件整理
Jan 06 Javascript
图片上传插件jquery.uploadify详解
Nov 15 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
Sep 12 Javascript
JavaScript知识点整理
Dec 09 Javascript
angular实现表单验证及提交功能
Feb 01 Javascript
Vue-CLI3.x 设置反向代理的方法
Dec 06 Javascript
vue动态路由:路由参数改变,视图不更新问题的解决
Nov 05 Javascript
详解Typescript 内置的模块导入兼容方式
May 31 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
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
通过JS获取用户本地图片路径并显示的代码
2012/02/16 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
js面向对象编程之如何实现方法重载
2014/07/02 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
jQuery中Ajax的load方法详解
2015/01/14 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
Python中删除文件的程序代码
2011/03/13 Python
用python实现百度翻译的示例代码
2018/03/09 Python
Python 编码规范(Google Python Style Guide)
2018/05/05 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
django-csrf使用和禁用方式
2020/03/13 Python
Python enumerate() 函数如何实现索引功能
2020/06/29 Python
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
个人简历自我评价八例
2013/10/31 职场文书
领班岗位职责范文
2014/02/06 职场文书
二手房买卖协议书
2014/04/10 职场文书
差生评语大全
2014/05/04 职场文书
戒毒悔改检讨书
2014/09/21 职场文书
团委工作总结2015
2015/04/02 职场文书
仰望星空观后感
2015/06/10 职场文书
严以用权专题学习研讨会发言材料
2015/11/09 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
Golang并发操作中常见的读写锁详析
2021/08/30 Golang
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS