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 相关文章推荐
javascript查找字符串中出现最多的字符和次数的小例子
Oct 29 Javascript
JSON取值前判断
Dec 23 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
Jul 11 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
Aug 19 Javascript
各式各样的导航条效果css3结合jquery代码实现
Sep 17 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
jQuery实现鼠标悬停3d菜单展开动画效果
Jan 19 Javascript
JavaScript中值类型和引用类型的区别
Feb 23 Javascript
微信小程序页面渲染实现方法
Nov 06 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
Nov 16 Javascript
vue使用过滤器格式化日期
Jan 20 Vue.js
小程序实现文字循环滚动动画
Jun 14 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的简单实例
2014/01/15 PHP
smarty模板中拼接字符串的方法
2014/02/14 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
ext 代码生成器
2009/08/07 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
JavaScript 实现打印,打印预览,打印设置
2014/12/30 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
ashx文件获取$.ajax()方法发送的数据
2016/05/26 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
Python中%是什么意思?python中百分号如何使用?
2018/03/20 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
python中os包的用法
2020/06/01 Python
python 如何调用 dubbo 接口
2020/09/24 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
中学自我评价
2014/01/31 职场文书
爱之链教学反思
2014/04/30 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
2015年公司后勤管理工作总结
2015/05/13 职场文书
2016教师校本培训心得体会
2016/01/08 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android