Node.js教程 基于Node.js模拟浏览器post请求爬取json数据
沉沙 2018-10-09 来源 : 阅读 1662 评论 0

摘要:本篇教程介绍了Node.js教程 基于Node.js模拟浏览器post请求爬取json数据,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

本篇教程介绍了Node.js教程 基于Node.js模拟浏览器post请求爬取json数据,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

<


一.写一个基于nodejs的爬虫
   1.引入所需模块
    这里需要引入http模块(nodejs用来向浏览器发送http请求的模块)和querystring模块(把前台传过来的对象形式的参数转化成字符串形式);
  

var http = require("http"); //http 请求
//var https = require("https"); //https 请求
var querystring = require("querystring");


  2.配置http.router(options,fn)参数options
  在配置中,重点在于模拟浏览器请求头,一般必须模拟Cookie,User-Agent(访问设备系统),Content-Type,有的需要模拟更多。在这里,我们的这个目标并没有Cookie,所以不用传。
  
  3.给目标后台发起http post请求得到数据

 var req = http.request(options, function (res) {

        var json = ""; //定义json变量来接收服务器传来的数据
        console.log(res.statusCode);
        //res.on方法监听数据返回这一过程,"data"参数表示数数据接收的过程中,数据是一点点返回回来的,这里的chunk代表着一条条数据
        res.on("data", function (chunk) {
            json += chunk; //json由一条条数据拼接而成
        })
        //"end"是监听数据返回结束,callback(json)利用回调传参的方式传给后台结果再返回给前台
        res.on("end", function () {
            callback(json);
        })
    })

    req.on("error", function () {
        console.log(‘error‘)
    })
//这是前台参数的一个样式,这里的参数param由后台的路由模块传过来,而后台的路由模块参数是前台传来的
//    var obj = {
//        query: ‘{"function":"newest","module":"zdm"}‘,
//        client: ‘{"gender":"0"}‘,
//        page: 1
//}
    req.write(querystring.stringify(param)); //post 请求传参
    req.end(); //必须要要写,


  4.模块化导出
  完整的spider代码

/**
 * Created by Administrator on 2017/2/12.
 */
var http = require("http"); //http 请求
//var https = require("https"); //https 请求
var querystring = require("querystring");
function request(path,param,callback) {
    var options = {
        hostname: ‘api.chuchujie.com‘,
        port: 80, //端口号 https默认端口 443, http默认的端口号是80
        path: path,
        method: ‘POST‘,
        headers: {
            "Connection": "keep-alive",
            "Content-Length": 111,
            "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36"
        }//伪造请求头
    };

    var req = http.request(options, function (res) {

        var json = ""; //定义json变量来接收服务器传来的数据
        console.log(res.statusCode);
        //res.on方法监听数据返回这一过程,"data"参数表示数数据接收的过程中,数据是一点点返回回来的,这里的chunk代表着一条条数据
        res.on("data", function (chunk) {
            json += chunk; //json由一条条数据拼接而成
        })
        //"end"是监听数据返回结束,callback(json)利用回调传参的方式传给后台结果再返回给前台
        res.on("end", function () {
            callback(json);
        })
    })

    req.on("error", function () {
        console.log(‘error‘)
    })
//这是前台参数的一个样式,这里的参数param由后台的路由模块传过来,而后台的路由模块参数是前台传来的
//    var obj = {
//        query: ‘{"function":"newest","module":"zdm"}‘,
//        client: ‘{"gender":"0"}‘,
//        page: 1
//}
    req.write(querystring.stringify(param)); //post 请求传参
    req.end(); //必须要要写,

}
module.exports = request;
   

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程