Node爬虫——利用superagent模拟登陆

一、概述

  最近学习了node,试着写了个爬虫,这是模拟登陆的一部分。

  1、需要的工具

  2、superagent用法的简述

  3、抓包分析

  4、最小示例

二、需要的工具

  nodejs,superagent,wireshark。

  nodejs没什么可介绍的。

  superagent是nodejs众多插件之一,用npm命令安装。是一个超轻的ajax api,有着可读性强,高度灵活,学习曲线低的优点。

  wireshark是一个抓包工具,很强大。之后我们需要用它来分析post请求与cookie。

三、superagent用法的简述

  以下是最简单的用法。

 向本地“/search”发出get请求,end()内的是回调函数。

request(‘GET‘, ‘/search‘).end(callback);

//or

 request
   .get(‘/search‘)
   .end(function(err, res){

   });

  

  这是post请求,set是设置http的header,之后我们cookie就是靠这个设置的。send是post传送的参数

  request.post(‘/user‘)
    .set(‘Content-Type‘, ‘application/json‘)
    .send(‘{"name":"tj","pet":"tobi"}‘)
    .end(callback)

  更具体的可以见文档

四、抓包分析

  在我们登录网站的时候,其向我们发送的response中会设置cookie,用来之后的浏览中验证我们的身份。

  因此我们不仅仅需要利用post模拟登录,更要保存好其发给我们的cookie,在之后的请求中将其设置在请求头中。

  

  红色框框中就是我们需要保存下来的cookie。

五、最小示例

var superagent = require(‘superagent‘);
var events = require("events");

var emitter = new events.EventEmitter()

setCookeie ();
emitter.on("setCookeie", getTitles)            //监听setCookeie事件

function setCookeie () {
  superagent.post(‘http://www.ourob.cn/bbs/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1‘)  //学校里的一个论坛,这是登录提交地址
    .type("form")
      .send({fastloginfield:"username"})
      .send({username:"foo"})                                                                                       //这肯定不是我真的用户名和密码啦
      .send({password:"bar"})
      .send({quickforward:"yes"})
      .send({handlekey:"ls"})
        .end(function(err, res){
          if (err) throw err;
          var cookie = res.header[‘set-cookie‘]             //从response中得到cookie
          emitter.emit("setCookeie", cookie)
        })
}

function getTitles (cookie) {
  superagent.get("http://www.ourob.cn/bbs/forum.php?mod=forumdisplay&fid=82&filter=typeid&typeid=185")             //随便论坛里的一个地址
      .set("Cookie", cookie[3])                 //在resquest中设置得到的cookie,只设置第四个足以(具体情况具体分析)
          .end(function(err, res){
                if (err){
              throw err;
                };
            //do something
          })
};
时间: 2024-10-14 11:18:14

Node爬虫——利用superagent模拟登陆的相关文章

python3下scrapy爬虫(第五卷:利用cookie模拟登陆抓取个人中心页面)

之前我们爬取的都是那些无需登录就要可以使用的网站但是当我们想爬取自己或他人的个人中心时就需要做登录,一般进入登录页面有两种 ,一个是独立页面登陆,另一个是弹窗,我们先不管验证码登陆的问题 ,现在试一下直接登陆的爬取: 爬虫是模拟人的行为来请求网页读取数据的现在我们划分一下过程,从登陆到获取: 先看一下我们到个人中心的过程: 登陆界面->输入账号密码->进入个人中心 1 进入登陆页面 可以说是第一次请求 此时会产生相应的COOKIE值,因为你只要先进入到页面才可以进行密码输入等行为 cookie

如何利用WebClient模拟登陆CSRF控制的网站

一般我们都是利用WebRequest这个类来向服务器进行数据的POST,不过很多情况下相应的服务器都有验证,看你是不是登陆,是不是来自同一个域,这些都简单,我们可以更改其属性来达到欺骗服务器.不过如果服务器做了CSRF控制,那我们怎么办? 不熟悉CSRF的可以问下G哥此为何物,这里简单介绍下.CSRF常规来讲是在表单页里放一个隐藏域,然后在表单提交的时候服务器验证POST过来的NAVEVALUE里面是不是包含此域,同时如果包含验证其值. 问题来了,在这种情况下我们POST到服务器的数据怎么写,虽

Node.js使用superagent模拟GET/POST请求样例

示例代码: var superagent = require('superagent'); superagent.get("http://localhost:8091/user/all?reqUsername=admin&reqPasswd=654321") .end( (err, res)=> { if (err) { console.log("出错:" + err); } else { console.log(res.text); } } ); /

爬虫三(模拟登陆)

1.Selenium工具 Selenium是ThroughtWorks公司开发的一套Web自动化测试工具,它分为三个组件: Selenium IDE Selenium RC (Remote Control) Selenium Webdriver Selenium IDE是firefox的一个插件,允许测试人员录制脚本并回放. Selenium RC和Selenium Webdriver是测试框架,提供多种语言的API.不同的是,Selenium Webdriver以一种更底层.更灵活的方式来操作

从零系列--node爬虫利用进程池写数据

1.主进程 const http = require('http'); const fs = require('fs'); const cheerio = require('cheerio'); const request = require('request'); const makePool = require('./pooler') const runJob = makePool('./worker') var i = 0; var url = "http://xxx.com/articl

如何模拟登陆添加了CSRF保护的网站

上次写了篇文章,内容是如何利用WebClient模拟登陆CSRF控制的网站,回复中有人还是不理解,现在另开一篇,打算说说用Python如何来登陆. 开写之前,先说下为什么webrequest不行,常规情况下,我们在利用webrequest的时候,都是如下的形式: 1 string url = "loginurl"; 2 StringBuilder sb = new StringBuilder(); 3 sb.Append("username=un"); 4 sb.A

nodejs爬虫笔记(五)---利用nightmare模拟点击下一页

目标 以腾讯滚动新闻为例,利用nightmare模拟点击下一页,爬取所有页面的信息.首先得感谢node社区godghdai的帮助,开始接触不太熟悉nightmare,感觉很高大上,自己写代码的时候问题也很多,多亏大神的指点. 一.选择模拟的原因 腾讯滚动新闻,是每六十秒更新一次,而且有下一页.要是直接获取页面的话得一页一页的获取,不太方便,又想到了找数据接口,然后通过请求得到数据,结果腾讯新闻的数据接口是加密的,这种想法又泡汤了.因而想到笔记(四)中模拟加载更多的模块,看利用nightmare这

运维学python之爬虫高级篇(六)scrapy模拟登陆

上一篇介绍了如何爬取豆瓣TOP250的相关内容,今天我们来模拟登陆GitHub. 1 环境配置 语言:Python 3.6.1 IDE: Pycharm 浏览器:firefox 抓包工具:fiddler 爬虫框架:Scrapy 1.5.0 操作系统:Windows 10 家庭中文版 2 爬取前分析 分析登陆提交信息分析登陆信息我使用的是fiddler,fiddler的使用方法就不作介绍了,大家可以自行搜索,首先我们打开github的登陆页面,输入用户名密码,提交查看fiddler获取的信息,我这

Scrapy 爬虫模拟登陆的3种策略

1   Scrapy 爬虫模拟登陆策略 前面学习了爬虫的很多知识,都是分析 HTML.json 数据,有很多的网站为了反爬虫,除了需要高可用代理 IP 地址池外,还需要登录,登录的时候不仅仅需要输入账户名和密码,而且有可能验证码,下面就介绍 Scrapy 爬虫模拟登陆的几种策略. 1.1  策略一:直接POST请求登录 前面介绍的爬虫 scrapy 的基本请求流程是 start_request 方法遍历 start_urls 列表,然后 make_requests_from_url方法,里面执行