目录

  • 模拟登陆的原因
  • 如何模拟登陆
  • 实战(demo)

模拟登陆的原因

很多网站,我们是无法直接获得服务器返回的数据,需要输入用户名及密码才能看到数据。如我们登陆人人网时,网站网址http://www.renren.com/。如图所示,看到的是一个登陆的界面,必须输入用户名及密码才能看到返回的数据。

登陆后,看到的数据,便可以通过爬虫将网站的html,或者json数据抓下来,解析。

如何模拟登陆

模拟登陆之前,需要进行抓包,获取相关的Cookie信息,这时候抓包很重要,如果不会抓包,请看前面的博客,学习抓包,看数据请求的地址及相关参数,本文将采用java的方法获取响应数据。

实战(demo)

package renren.renren;import java.util.ArrayList;
import java.util.List;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;public class RenRen {/*以下是模拟登陆程序*//*输入你的用户名及密码 ,这里输入*/private static String userName = "";  private static String password = ""; private static String redirectURL = "http://www.renren.com/465530468/profile?v=info_timeline";   // Don't change the following URL  private static String renRenLoginURL = "http://www.renren.com/PLogin.do";  // The HttpClient is used in one session  private HttpResponse response;  private DefaultHttpClient httpclient = new DefaultHttpClient();  /*输入抓包的参数,即传递的参数*/private boolean login() {  HttpPost httpost = new HttpPost(renRenLoginURL);  // All the parameters post to the web site//建立一个NameValuePair数组,用于存储欲传送的参数,添加相关参数,见上图中的参数List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("origURL", redirectURL));  nvps.add(new BasicNameValuePair("domain", "renren.com"));  nvps.add(new BasicNameValuePair("isplogin", "true"));  nvps.add(new BasicNameValuePair("email", userName));  nvps.add(new BasicNameValuePair("password", password));  try {  /*登陆成功,获取返回的数据,即html文件*/httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));  response = httpclient.execute(httpost);  } catch (Exception e) {  e.printStackTrace();  return false;  } finally {  httpost.abort();  }  return true;  }  private String getRedirectLocation() { /*获取响应的头 url*/ Header locationHeader = response.getFirstHeader("Location");  if (locationHeader == null) {  return null;  }  return locationHeader.getValue();  }  /*获取html文本*/ private String getText(String redirectLocation) {  HttpGet httpget = new HttpGet(redirectLocation);  // Create a response handler  ResponseHandler<String> responseHandler = new BasicResponseHandler();  String responseBody = "";  try {  responseBody = httpclient.execute(httpget, responseHandler);  } catch (Exception e) {  e.printStackTrace();  responseBody = null;  } finally {  httpget.abort();  httpclient.getConnectionManager().shutdown();  }  return responseBody;  }  public void printText() {/*如果注册成功了,输入相应后的html*/   if (login()) {  String redirectLocation = getRedirectLocation();  if (redirectLocation != null) {  System.out.println(getText(redirectLocation));  }  }  }  /*main方法*/public static void main(String[] args) {  RenRen renRen = new RenRen();  renRen.printText();  }
}

在这里说明一下,为什么使用”http://www.renren.com/PLogin.do“,这个地址,底下有很多人问。如下截图:

如下图所示,便获得了html文件,只要对这个html文件解析就行了。

有什么不明白的,请发邮件至1563178220@qq.com 合肥工业大学管理学院 钱洋

网络爬虫中的模拟登陆获取数据(实例教学1)相关推荐

  1. 网络爬虫模拟登陆获取数据并解析实战(二)

    本文为原创博客,仅供学习使用.未经本人允许禁止复制下来,上传到百度文库等平台. 目录 分析要获取的数据 程序的结构 构建封装数据的model 模拟登陆程序并解析数据 结果展示 分析要获取的数据 下面继 ...

  2. 网络爬虫入门:网络爬虫的目的,企业获取数据的方式,可以用于做爬虫的程序语言,爬虫爬取数据的步骤

    目录 爬取数据的目的: 1.获取大量数据,用于做数据分析 2.公司项目的测试数据,公司业务所需数据 企业获取数据的方式 1.公司自有数据 2.第三方数据平台购买(数据堂,贵阳大数据交易所) 3.爬虫爬 ...

  3. C# 利用HttpWebRequest模拟登陆获取数据设置Accept-Encoding为gzip,deflate后返回的网页是乱码处理

    原由:在解决模拟登陆抓取数据的时候post一个地址时老是获取的内容是乱码. 经过检查最终应该是编码是HttpWebRequest.Headers.Add("Accept-Encoding&q ...

  4. Python 爬虫实战,模拟登陆爬取数据

    Python 爬虫实战,模拟登陆爬取数据 从0记录爬取某网站上的资源连接: 模拟登陆 爬取数据 保存到本地 结果演示: 源网站展示: 爬到的本地文件展示: 环境准备: python环境安装 略 安装r ...

  5. 利用python爬虫(part15)--cookie模拟登陆

    学习笔记 文章目录 cookie模拟登陆 获取cookie 爬取我的简介 cookie模拟登陆 有的时候,我们想要抓取一个网站,但是需要先登录才能访问它,如果不输入用户名和密码,我们就会一直停留在登录 ...

  6. 爬取新浪微博新闻(selenium),包括模拟登陆,数据存储等(适合初学者)

    爬取新浪微博(模拟登陆,数据存储) 写在最开头 下载浏览器驱动 测试驱动是否匹配/font> 模拟登陆 分析待爬取页面信息 保存数据 程序github地址 写在最开头 该程序主要是为爬取新浪微博 ...

  7. scrapy淘宝爬虫(通过模拟登录获取cookie)获取价格信息评论

    项目要求:爬取淘宝某领域下的商品名称,价格,评论. (我贼怂,如果阿里巴巴的朋友发现,请联系我,我立刻删帖,谢谢.) 一.构思流程 模拟登陆 获取cookie scrapy爬取数据 二.分步分析 (一 ...

  8. Java网络爬虫--一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库

    一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库 目录 一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库 第一步:创建项目,搭建项目结构 p ...

  9. dht java_一个java版本的dht网络爬虫,伪装dht节点获取hashinfo

    dht-spider 一个java版本的dht网络爬虫,伪装dht节点获取hashinfo 导入idea 在入口类DhtNetworkApplication 的main方法下 修改udp端口 直接运行 ...

最新文章

  1. oracle同步复制清理,Oracle数据库同步——高级复制
  2. python云盘服务_Python无所不能?五分钟教会你用python打造个人云盘!
  3. 为什么多对多关系需要建立中间表_中间表是什么?和报表有什么关系?会带来怎样的问题?又如何解决?...
  4. 重复运行JUnit测试而没有循环
  5. elasticsearch_head插件安装
  6. 100篇文献-万字总结 || 强化学习求解车间调度
  7. 房产管理系统下载和安装步骤
  8. C语言 16进制与字符串互转函数
  9. 前有刘德华,后有腾格尔和光头李进,明星为何都热衷于线上演唱会
  10. JavaScript事件函数
  11. windows无法完成格式化怎么办?
  12. 微信支付和分享到朋友圈-struts版本
  13. php英文随机验证码,PHP随机字母数字验证码
  14. Qt安装包官方下载地址
  15. win7旗舰版安装telnet,报错:打开程序包 Telnet Client 的更新 TelnetClient 失败。状态为: 0x80073712。解决方案
  16. zz:使用Monkeyrunner进行Android自动化的总结
  17. Fw:[一恒茶社] 作为大学教师,我 感到羞耻??教师节有感及其他[转贴]
  18. 权值线段树+动态开点(学习小结)
  19. python05元组字典
  20. 中国联通净增5G用户数超越中国电信,但夺回千年老二或是梦想

热门文章

  1. Serverless实战 —— 三分钟入坑指北 Docsify + Serverless Framework 快速创建个人博客系统
  2. 面试精讲之面试考点及大厂真题 - 分布式专栏 13项目中为什么要使用消息队列
  3. Kubernetes 为 Namespace 配置CPU和内存配额
  4. 在 ASP.NET Core 5.0 中访问 HttpContext
  5. Spring之JDBC模板
  6. 【Python】random库
  7. 如何解决linux标准输出中带颜色的字符
  8. javascript 库_您应该在2020年尝试的10个很棒JavaScript库
  9. 个人推动团队项目进展_推动者和关守者对开发团队的价值
  10. 程序员为什么觉得会议很无聊_我从100个无聊的会议中学到的难忘的教训