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 相关文章推荐
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
Sep 22 Javascript
JavaScript加入收藏夹功能(兼容IE、firefox、chrome)
May 05 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
Feb 25 Javascript
jQuery实现点击查看大图并以弹框的形式居中
Aug 08 Javascript
Bootstrap基本样式学习笔记之图片(6)
Dec 07 Javascript
Vue+axios 实现http拦截及路由拦截实例
Apr 25 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
May 11 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
Feb 01 Javascript
JS中常用的消息框总结
Feb 24 Javascript
简单两步使用node发送qq邮件的方法
Mar 01 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
Jul 18 Javascript
VSCode launch.json配置详细教程
Jun 18 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
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
常用的php对象类型判断
2008/08/27 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
javascript自定义函数参数传递为字符串格式
2014/07/29 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
JavaScript如何实现图片懒加载(lazyload) 提高用户体验(增强版)
2016/11/30 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
jQuery Chosen通用初始化
2017/03/07 Javascript
babel的使用及安装配置教程
2018/02/22 Javascript
JavaScript键盘事件常见用法实例分析
2019/01/03 Javascript
微信小程序中限制激励式视频广告位显示次数(实现思路)
2019/12/06 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
Python多线程正确用法实例解析
2020/05/30 Python
django创建css文件夹的具体方法
2020/07/31 Python
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
JS原生实现轮播图的几种方法
2021/03/23 Javascript
应届生个人求职信模板
2013/11/26 职场文书
个人求职信范文分享
2013/12/13 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
西安事变观后感
2015/06/12 职场文书
何玥事迹观后感
2015/06/16 职场文书
婚宴父母致辞
2015/07/27 职场文书
教师远程研修感悟
2015/11/18 职场文书
家庭教育教师培训学习体会
2016/01/14 职场文书
CSS的class与id常用的命名规则
2021/05/18 HTML / CSS
宫崎骏十大动画电影,宫崎骏好看的动画电影排名
2022/03/22 日漫