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 相关文章推荐
推荐30个新鲜出炉的精美 jQuery 效果
Mar 26 Javascript
基于jquery实现控制经纬度显示地图与卫星
May 20 Javascript
jquery实现表格本地排序的方法
Mar 11 Javascript
jquery.mousewheel实现整屏翻屏效果
Aug 30 Javascript
jQuery实现带有上下控制按钮的简单多行滚屏效果代码
Sep 04 Javascript
初步了解javascript面向对象
Nov 09 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
Dec 26 Javascript
jquery if条件语句的写法
May 19 Javascript
详解React 在服务端渲染的实现
Nov 16 Javascript
vue.js项目中实用的小技巧汇总
Nov 29 Javascript
浅谈vue中.vue文件解析流程
Apr 24 Javascript
js实现图片上传到服务器和回显
Jan 19 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
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
自定义PHP分页函数
2006/10/09 PHP
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
讨论html与javascript在浏览器中的加载顺序问题
2013/11/27 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
AngularJS中的DOM操作用法分析
2016/11/04 Javascript
canvas知识总结
2017/01/25 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
详解vue项目中实现图片裁剪功能
2019/06/07 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
Python栈类实例分析
2015/06/15 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python解决字符串倒序输出的问题
2018/06/25 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
Java程序员面试题
2013/07/15 面试题
给国外客户的邀请函
2014/01/30 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
2014年终个人工作总结
2014/11/07 职场文书
争先创优个人总结
2015/03/04 职场文书
2015年招生工作总结
2015/05/04 职场文书
女方家长婚礼致辞
2015/07/27 职场文书
保外就医申请书范文
2015/08/06 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python