爬虫模拟登录,爬虫牛人请进,求救!!!
发布于 2个月前 作者 henllyee 396 次浏览 来自 问答

想爬韩国的naver cafe上的内容,要求登录。实现思路如下: 1、模拟登录; 2、登录成功后保存cookie; 3、发送请求中包含cookie信息,进行爬虫内容的抓取。 模拟登录的时候,发现naver的登录进行了加密。 登录地址,要抓取的页面,牛人帮我看看如何模拟登录。

6 回复

我告诉你怎么登陆吧。。。

  1. 用 chrome 进行登陆
  2. 把 chrome 中的 cookie 字符串保存下来
  3. 再每次发请求的时候,header 中设置一下 cookie 就好

不要去做什么自动填表单!登陆只是一次性工作!在外面做了就好!

cookie的部分直接用cookie jar来管理吧, request模块(https://github.com/request/request)就提供了这样的选项:

jar - If true and tough-cookie is installed, remember cookies for future use (or define your custom cookie jar; see examples section)

@alsotang 英雄所见略同,我现在也是通过把cookie中的字符串给保存下来了,然后发送过去的。但是总感觉不是最佳解决方案。

这个不是很困难吧,登录成功后,将服务器响应中的Set-Cookie的值保存到一个变量(不要使用局部变量),然后接下来的请求每次都加上一个请求头Cookie,值就是你前面保存的cookie的值就可以了。

@nodejser naver的登录模拟比较困难

 var opton1={
 method:"POST",
 host:"",//服务器主机Ip,填域名也行
 port:"",//http服务器的端口一般是80,IEEE默认的
 path:"",//登陆信息的提交目的地,我爬教务处的时候是/LoginAction.do,相当于form的action
 headers:{
 "Content-Type":"application/x-www-form-urlencoded",
 "Content-length":userInfo.length//userInfo是登陆填的信息,userInfo=query.stringify({"name":"  ","password":" "}),感觉用JSON.stringify也没问题, name和password这俩个键名因网站而异,就是form里面input的name属性值
 }
}
var request1=http.request(option1);
request1.write(userInfo);
request1.end();
request1.on("error",functon(e){.......});
request1.on("response",function(respnse){
   //这里的话,response就会包含返回的cookie,但是我不知道如果这里有重定向该怎么做
   var option2={
      method:"GET",
      host:"",
      port:"",
      path:"",//目标页面
      headers:{
     "cookie":response.headers["set-cookie"].toString()//这个就是cookie,可以用util解析一下response.headers,看看里面到底有什么
    }
   }
   var request2=http.request(option2);
   request2.end();
   request2.on("error",function(e){......});
   request2.on("response",function(response2){
     var wr=fs.createWriteStream("./output.txt");
     response2.pipe(wr);//这样output.txt里面就是目标页面的html文档了
    //也可以监听data事件
   //response2.on("data",function(data){});
   //response2.on("end",function(){..})
 })
})

这几行代码应该可以拿到目标页面的html文档内容,我自己也有几个地方没搞明白,就是怎么处理重定向问题,还有为什么我的MAC地址被教务处封了1个星期。。。。。,我有敲代码去注销登陆啊。有同等经历的同学还请搭救一下 ><
回到顶部