nodejs--实现跨域抓取数据

news/2024/7/19 10:28:42 标签: 爬虫

    最近公司安排给我一个任务,抓取页面数据;http://survey.finance.sina.com.cn/static/20205/20131120.html?pid=20205&dpc=1,身为一个前端,还没搞过后台的东西,硬着头皮接下之后,就到网上各种找方法了。最终找到一个nodejs的方法,经过实践之后,觉得非常好用,所以分享给大家。此教程从0开始 ,适用于从来还没接触过nodejs的童鞋!
1.先下载 nodejs,这个不多说,然后双击安装文件安装。下载地址:http://www.nodejs.org/download/;
2.安装完成后,直接打开cmd,键入 node -v,输出node版本号,再输入npm -v,输出npm版本号 ,说明安装成功,继续下一步;
3.键入npm install express -g,意思是安装express服务器到全局,作用是后面可以创建项目;
4.键入npm install jade -g,安装jade模块;
5.键入npm install cheerio -g,安装cheerio模块,用来解析html非常方便,就像在浏览器中使用jquery一样,可以理解为这是一套规则的模块。
6.继续键入express -V(此处是大写,因为新版本才能识别),如果成功 会提示express的版本号,如果失败,提示“express不是内部命令”,就需要再键入命令npm install express-generator -g;
7.再次输入express -V,就会显示正常了,另外,输入node list可以查看自己安装了哪些模块。;
8.然后输入express myapp;作用是创建自己的项目,名为myapp,路径是c/用户/xxx/myapp;实在不行就在计算机搜索myapp也行。
9.然后就可以在项目里加js文件了,新建一个load.js文件,同时在目录下新建一个number.txt的文件,代码中会用到;
10.里面的内容为:

var http = require("http");

// Utility function that downloads a URL and invokes
// callback with the data.
function download(url, callback) {
  http.get(url, function(res) {
    var data = "";
    res.on('data', function (chunk) {
      data += chunk;
    });
    res.on("end", function() {
      callback(data);
    });
  }).on("error", function() {
    callback(null);
  });
}

var cheerio = require("cheerio");
var fs =require('fs');

    var url = "http://survey.finance.sina.com.cn/static/20205/20131120.html?pid=20205&dpc=1";
    download(url, function(data) {
      if (data) {
          //console.log(data);
          var $ = cheerio.load(data);
          var total =$(".fred").text();
          fs.appendFile('./number.txt',total,'utf-8',function(err){
              if(err) {throw err;}
          });
          var numArrs=$("div[class='d d-num']").text();
          numArrs =numArrs.replace(/,/g,'');//把所有的逗号变为空(数字中间的逗号)
          numArrs =numArrs.replace(/\s+/g, ',');//把所有的空字符串变为一个逗号(数字与数字之间变为逗号)
          numArrs =numArrs.replace(/,$/gi, '');//去除最后一个逗号
          fs.appendFile('./number.txt',numArrs,'utf-8',function(err){            
              if(err) {throw err;}
          });
          console.log("done");
        }
        else console.log("error");  
    });

11.然后进入cmd,输入cd myapp,进入myapp目录,然后输入命令node load.js,执行js文件,然后就可以打开number.txt文件看到,里面就有你想要的数据了,如下图所示。

执行效果:

文件效果:
到这里,简单的抓取数据就结束了。当然还可以进行扩展,比如写循环,日期变换,可以获取更多不同页面的数据。

转载于:https://www.cnblogs.com/jarson-7426/p/4151272.html


http://www.niftyadmin.cn/n/758166.html

相关文章

oracle 表创建语句,oracle创建表语句

以下是两个简单的创建案例:create table "pc_pp_product"("phone_id" VARCHAR2(32 BYTE) NOT NULL ENABLE, --主键"color" VARCHAR2(32 BYTE),"phone_type" VARCHAR2(32 BYTE),"weidth" VARCHAR2(32 BYTE),"…

jvm-初探

目录 1,Java体系结构 2.jvm执行引擎 3,ClassLoader的体系结构 4,java class文件 概述 其实,学java不算新手了,但是却感觉很多基本的知识,我们一开始也许是记住而不深究,我觉得有一些概念,还是需要了解. 我们所说的java程序,需要jvm,java api,java class的辅助才能运行.我们从下…

oracle指令集,SQL常用指令集(Oracle)

1、 Select rownum(oracle) top(mysql):用于规定返回指定数目的值Where roenum < number2、 Like用于在where子句搜索指定模式Where 列名 [NOT] like ‘%string’ [ESCAPE]’\%(_)’Where 列名 [NOT] like ‘_string’ [ESCAPE]’\%(_)’%表示&#xff1a;任意长度select *f…

PHP时间戳与时间相互转换(精确到毫秒)

PHP时间戳与时间相互转换(精确到毫秒) 原文:PHP时间戳与时间相互转换(精确到毫秒) /** 获取当前时间戳&#xff0c;精确到毫秒 */function microtime_float(){ list($usec, $sec) explode(" ", microtime()); return ((float)$usec (float)$sec);} /** 格式化时…

php tagcloud,WordPress函数:wp_tag_cloud(标签云)详解和举例

wp_tag_cloud() 函数的作用是用来标签云的&#xff0c;可以根据每个标签所关联的文章次数来定义字体大小、标签排序等属性。从 2.8 版本开始&#xff0c;添加了 分类法(taxonomy)参数&#xff0c;这就意味着&#xff0c;除了 标签(tags)以外&#xff0c;还可以将 分类(Categori…

周记 2014.12.13

1. 新导入项目集中报错的原因总结&#xff1a; 1). 编码方式错误: 右键—properties—Resource 进行修改。 2). jre和tomcat版本: 右键project->Build Path->Configure Build Path->选择Libraries tab页->删除带小红叉的Library->点击Add Library ->选择JRE …

Oracle错误00202,Oracle关于控制文件的错误ORA-00202的处理

最近的工作需要维护一个小小的数据库.前天服务器停电,UPS电源耗尽也没来电,后来来电后,启动数据库加载失败.查看AlertLog 发现报错ORA-00202: control file: /dev/raw/raw13由于本人实在不是专业Linux维护人员,所以认为是服务器停电造成的文件丢失.那就恢复控制文件呗.经过询问…

Linux 权限设置

1&#xff1a; chmod ux filea -- 这个为u用户增加execute 权限&#xff01; 2&#xff1a; chmod u-r,g-r,o-r filea 对user,group,others 都减去read 权限&#xff01; 3&#xff1a; chmod 777 filea 对user,group,others 都加上rwx权限&#xff01; …