基于nodejs模拟浏览器post请求爬取json数据

今天想爬取某网站的后台传来的数据,中间遇到了很多阻碍,花了2个小时才请求到数据,所以我在此总结了一些经验。

首先,放上我所爬取的请求地址http://api.chuchujie.com/api/?v=1.0;

下面我们开始爬取数据。

一.写一个基于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;

  

时间: 2024-10-26 10:50:47

基于nodejs模拟浏览器post请求爬取json数据的相关文章

httpClient模拟浏览器发请求

一.介绍 httpClient是Apache公司的一个子项目, 用来提高高效的.最新的.功能丰富的支持http协议的客户端编程工具包.完成可以模拟浏览器发起请求行为. 二.简单使用例子 : 模拟浏览器发起访问谷歌首页请求 1.pom.xml 配置 <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <ve

爬取百万数据的采集系统从零到整的过程

目录 需求 分析 设计 实现 框架 采集 遇到的问题 demo 数据 效果 数据 关注关注我的公众号啊 前言:记录下在上家公司负责过的一个采集系统从零到整的过程,包括需求,分析,设计,实现,遇到的问题及系统的成效,系统最主要功能就是可以通过对每个网站进行不同的采集规则配置对每个网站爬取数据,目前系统运行稳定,已爬取的数据量大概在600-700万之间(算上一些历史数据,应该也有到千万级了),每天采集的数据增量在一万左右,配置采集的网站1200多个,这个系统其实并不大,但是作为主要的coding人员

python爬虫——爬取网页数据和解析数据

1.网络爬虫的基本概念 网络爬虫(又称网络蜘蛛,机器人),就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序.只要浏览器能够做的事情,原则上,爬虫都能够做到. 2.网络爬虫的功能   图2 网络爬虫可以代替手工做很多事情,比如可以用于做搜索引擎,也可以爬取网站上面的图片,比如有些朋友将某些网站上的图片全部爬取下来,集中进行浏览,同时,网络爬虫也可以用于金融投资领域,比如可以自动爬取一些金融信息,并进行投资分析等. 有时,我们比较喜欢的新闻网站可能有几个,每次

爬虫(十):AJAX、爬取AJAX数据

1. AJAX 1.1 什么是AJAX AJAX即“Asynchronous JavaScript And XML”(异步JavaScript和XML)可以使网页实现异步更新,就是不重新加载整个网页的情况下,对网页的某部分进行更新(局部刷新).传统的网页(不使用AJAX)如果需要更新内容,必须重载整个网页页面. AJAX = 异步JavaScript和XML,是一种新的思想,整合之前的多种技术,用于创建快速交互式网页应用的页面开发技术. 1.2 同步和异步 同步现象:客户端发送请求到服务器端,当

爬虫再探实战(五)———爬取APP数据——超级课程表【一】

关于爬虫,开始以为只能爬取网页数据,后来知道APP也能抓取.于是,在学校利用空闲时间,耗时两周实现了数据的抓取和简单的数据分析. 目标,抓取超级课程表XX大学(其实是我们大学啦...)学生20000条发帖信息.思路如下: STEP1:为我们的爬虫找到入口 APP请求数据,也是通过网络协议,这样,我们就抓包来定位入口,这里我用的是fiddler.关于设置手机和fiddler的关联,请参考这篇文章. 找到登陆入口为:http://120.55.151.61/V2/StudentSkip/loginC

用puppeteer爬取网页数据初体验

用puppeteer爬取网页数据 业务需求,页面需要显示很多链接列表,像这样的. 我问项目经理要字典表,他笑咪咪地拍着我的肩膀说:"这边有点忙,要不按照这个自己抄一下吧". emmm- 我看了一下,数据大概有七八百条,一个一个录入,那不得搞到地老天荒.海枯石烂. 心口一股燥热,差点就要口吐莲花,舌吐芬芳了- 转念一想,做人要儒雅随和,念在平时没少蹭吃蹭喝的份上,咱先弄一下吧. 可是怎么弄呢? 一个一个输入是不可能的,我们需要录入每个组的标题.标题下的名称和链接,这是需要看网页源码,效率

Scrapy爬取全站数据并存储到数据库和文件中

scrapy五大核心组件简介 引擎(Scrapy) 用来处理整个系统的数据流处理, 触发事务(框架核心) 调度器(Scheduler) 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 下载器(Downloader) 用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的) 爬虫(Spiders) 爬虫

爬虫——使用多进程爬取视频数据

以梨视频为例分析页面请求抓取网页数据.本次抓取梨视频生活分类页面下的部分视频数据,并保存到本地. 一.分析网页 打开抓取网页,查看网页代码结构,发现网页结构里面存放视频的地址并不是真正的视频地址. 进入视频详情页面查看后,可以在response中找到真正的视频地址.保存这个地址的并不是标签,而是一个变量,我们使用re来解析这个变量,提取信息. 二.代码实现 """使用多线程爬取梨视频视频数据""" import requests import r

利用linux curl爬取网站数据

看到一个看球网站的以下截图红色框数据,想爬取下来,通常爬取网站数据一般都会从java或者python爬取,但本人这两个都不会,只会shell脚本,于是硬着头皮试一下用shell爬取,方法很笨重,但旨在结果嘛,呵呵. 2.首先利用curl工具后者wget工具把整个网站数据爬取下来 curl 网址 >wangzhan.txt 3.查看wangzhan.txt文件,找出规则,看到数据是存放在哪个地方,本人是把txt文件拷到本机上用UE打开方便查看.通过查看文件,我发现数据是存储在"var aut