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 让图片在 div或dl里 居中,底部对齐
Jan 21 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
Aug 16 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
Jul 31 Javascript
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
JS中Date日期函数中的参数使用介绍
Jan 02 Javascript
JS操作iframe里的dom(实例讲解)
Jan 29 Javascript
JavaScript中的this关键字使用方法总结
Mar 13 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
Aug 04 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
Feb 23 Javascript
详解Angular 开发环境搭建
Jun 22 Javascript
Webstorm2016使用技巧(SVN插件使用)
Oct 29 Javascript
Vue快速实现通用表单验证的方法
Feb 24 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中的unset究竟会不会释放内存
2013/07/18 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
javascript学习(一)构建自己的JS库
2013/01/02 Javascript
jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同的解决办法
2013/05/13 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
JS代码实现根据时间变换页面背景效果
2016/06/16 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
js实现淘宝浏览商品放大镜功能
2020/10/28 Javascript
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
python模块导入的方法
2019/10/24 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
pytorch中的自定义反向传播,求导实例
2020/01/06 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
Python中Qslider控件实操详解
2021/02/20 Python
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
教学实习自我评价
2014/01/28 职场文书
医学生求职信
2014/07/01 职场文书
三严三实对照检查材料范文
2014/09/23 职场文书
2014普法依法治理工作总结
2014/12/18 职场文书
迎新生欢迎词
2015/01/23 职场文书
高中美术教学反思
2016/02/17 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL
Redis实现订单过期删除的方法步骤
2022/06/05 Redis