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获取图片大小的函数代码
Sep 20 Javascript
jquery 列表双向选择器之改进版
Aug 09 Javascript
JavaScript关闭当前页面(窗口)不带任何提示
Mar 26 Javascript
jQuery插件jRumble实现网页元素抖动
Jun 05 Javascript
JavaScript实现选择框按比例拖拉缩放的方法
Aug 04 Javascript
AngularJS 中的指令实践开发指南(一)
Mar 20 Javascript
jQuery简单创建节点的方法
Sep 09 Javascript
Validform表单验证总结篇
Oct 31 Javascript
详解Vue-基本标签和自定义控件
Mar 24 Javascript
mpvue项目中使用第三方UI组件库的方法
Sep 30 Javascript
vue设置动态请求地址的例子
Nov 01 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
Apr 20 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
快速配置PHPMyAdmin方法
2008/06/05 PHP
PHP学习笔记之数组篇
2011/06/28 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
2013/07/03 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
在Ubuntu 18.04上安装PHP 7.3 7.2和7.0的方法
2019/04/09 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
web的各种前端打印方法之jquery打印插件jqprint实现网页打印
2013/01/09 Javascript
jQuery实现带玻璃流光质感的手风琴特效
2015/11/20 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
2017/05/25 jQuery
解决React Native端口号修改的方法
2017/07/28 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
python购物车程序简单代码
2018/04/18 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
在CentOS7下安装Python3教程解析
2020/07/09 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
师范生自荐信
2013/10/27 职场文书
国际贸易个人求职信范文
2014/01/04 职场文书
电大本科自我鉴定
2014/02/05 职场文书
团队经理竞聘书
2014/03/31 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
十大最强岩石系宝可梦,怪颚龙实力最强,第七破坏力很强
2022/03/18 日漫