模拟提交就是说我们不自己登陆到客户端,仅仅靠发送请求就模拟了客户端的操作,在现实使用的时候经常用来接收一些需要登录才能获取到的数据,来模拟表单的提交,所以很多时候也被称作虚拟登录,这次的例子是我自己为学校实验室开发的官方网站的纳新报名系统,设置有一个管理员,管理员通过登录就可以查看报名人的信息,做一个虚拟登录来获取到报名信息页面,因为如果没有登录直接到达这个页面,页面是不给访问的,具体技术我开发的时候用到了session,就不详细描述了。

那么获取数据的条件为:(报名信息URL为...省略\FreshTable.html,登录页面为...省略\login.html)

1.必须登录

2.为POST请求方式

首先是先直接输入报名信息的页面我们会看到页面直接跳到了登录页面。如果直接没有登录的时候抓取网页的时候我们可以看到的现象是(URL:...省略\FreshTable.html):

 <div class="msg2 fl">欢迎管理员登录</div>
<div class="hline fr">
</div>
</div>
<div class="inputer">
<form action="FreshTable.html" method="post">
<input class="inputext" type="text" name="UserName" id="UserName" placeholder="用户名" onkeydown="if(event.keyCode==13) event.keyCode=9">
<input class="inputext" type="password" name="Password" id="Password" placeholder="密码">
<input type="submit" id="submitbtn" value="登录"/>

现在开始我们的主题。

经过研究发现,昨天的HttpClient的包官方已经不用了,现在属于遗留的包,Maven都找不到昨天的包,所以今天重新换了新的包,之前的common下的HttpClient包,这次使用的是

org.apache.http.impl.client.HttpClients;

这个包。

这个包在Maven中配置是:

 <dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
</dependency>

这里我选用了4.5.1的包,也可以选择其他版本。

现在进行编码,今天这个包的操作和之前有一定的区别,所以代码就改了

 CloseableHttpClient httpClient= HttpClients.createDefault();
HttpPost post=new HttpPost("××××××××/FreshTable.html");
try {
CloseableHttpResponse response=httpClient.execute(post);
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (IOException e) {
e.printStackTrace();
} }

以上代码的功能为输出这个URL的内容然而并不是我们想要的内容:获得的HTML代码为之前开始的HTML代码。这是就需要一个虚拟登录了。

首先我们要知道表单的代码,这里表单的代码为:

 <input class="inputext" type="text" name="UserName"  id="UserName" placeholder="用户名" onkeydown="if(event.keyCode==13) event.keyCode=9">
<input class="inputext" type="password" name="Password" id="Password" placeholder="密码">
<input type="submit" id="submitbtn" value="登录"/>

我们可以看到name的值分别为UserName和password,分别对应这用户名和密码,所以我们就可以通过这个来登录。

先解释几个类和方法:

BasicNameValuePair

用来写入Name值和对应的value值

UrlEncodedFormEntity

这个将那些name和value写到实例中,构造方法对应的两个是BasicNameValuePair的数据和字符编码。之后在用post来发送请求。

整体代码为:

 public class TestSp01 {
public static void main(String[] args){
CloseableHttpClient httpClient= HttpClients.createDefault();
HttpPost post=new HttpPost("http://×××××××××/FreshTable.html");
List<NameValuePair> formparams=new ArrayList<NameValuePair>();
formparams.add(new BasicNameValuePair("UserName","××××××"));
formparams.add(new BasicNameValuePair("Password","××××××"));
UrlEncodedFormEntity entity=new UrlEncodedFormEntity(formparams, Consts.UTF_8);
post.setEntity(entity);
try {
CloseableHttpResponse response=httpClient.execute(post);
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (IOException e) {
e.printStackTrace();
} }
}

以上代码运行就执行了使用post方式登录,那么这时获取到的数据也就成为了:

 <tr>
<td>×××××</td>
<td>×××××</td>
<td>1×××××××××37</td>
<td>光电××××</td>
<td>0</td>
<td>10××××××80</td>
<td>104××××××@××.com</td>
</tr> <tr>
……
</tr>

完成了一次模拟提交。

=========================================

网络爬虫入门(二)模拟提交以及HttpClient修正的更多相关文章

  1. 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用

    [网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院  欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...

  2. 2.Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  3. Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  4. 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫

    [网络爬虫入门01]应用Requests和BeautifulSoup联手打造的第一条网络爬虫 广东职业技术学院 欧浩源 2017-10-14  1.引言 在数据量爆发式增长的大数据时代,网络与用户的沟 ...

  5. 爬虫入门二 beautifulsoup

    title: 爬虫入门二 beautifulsoup date: 2020-03-12 14:43:00 categories: python tags: crawler 使用beautifulsou ...

  6. 【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器

    [网络爬虫入门04]彻底掌握BeautifulSoup的CSS选择器 广东职业技术学院  欧浩源 2017-10-21 1.引言 目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup ...

  7. 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用

    [网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院  欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...

  8. 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

    1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...

  9. 【网络爬虫入门03】爬虫解析利器beautifulSoup模块的基本应用

    [网络爬虫入门03]爬虫解析利器beautifulSoup模块的基本应用   1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.B ...

随机推荐

  1. Mac下快速新建txt文件

    1.打开终端,定位到桌面 cd desktop 2.输入 vi test.txt 此时,一个txt文件就会建立在桌面上,操作vi时的提示:按[i]为输入内容,编辑好之后按[esc]键,然后输入[:wq ...

  2. WCF系列教程之WCF服务协定

    本文参考自:http://www.cnblogs.com/wangweimutou/p/4422883.html,纯属读书笔记,加深记忆 一.服务协定简介: 1.WCF所有的服务协定层里面的服务接口, ...

  3. unity字库精简

    有2种办法,具体看情况使用 1.unity自带功能 选择放入的字体,修改Character项为"Custom set",接着出现Custom Chars中输入你想使用的字符串,字符 ...

  4. Ibatis框架之系统架构

    如果用最简洁的话来总结 iBATIS 主要完成那些功能时,我想下面几个代码足够概括. Class.forName("oracle.jdbc.driver.OracleDriver" ...

  5. @Scheduled执行定时任务与cron表达式

    1 配置文件形式执行定时任务 1 1.X 版本与spring结合使用实例 1.1 常用maven管理 pom.xml文件 <project xmlns="http://maven.ap ...

  6. SQL Serever学习5——数据库配置

    数据库的主要属性 限制访问 用来设置数据允许用户访问的状态,或者说允许多少客户访问,有3个选项: MULTI_USER(多个),大多数数据库正常状态,允许多个用户同时访问该数据库. SINGLE_US ...

  7. Java常用的排序算法三

    Merge Sort :归并排序:用递归的思想,分解成单个元素的排序,在归并 代码: import java.util.*; public class MergeSort { public stati ...

  8. 【SSH网上商城项目实战17】购物车基本功能的实现

    转自:https://blog.csdn.net/eson_15/article/details/51418350 上一节我们将商品的详细页面做完了,并使用了Hibernate的二级缓存加载详细页面来 ...

  9. Oracle SQL developer 连接 MySQL 数据库安装配置

    1. 下载 JDBC driver for MySQL 下载链接: https://dev.mysql.com/downloads/connector/j/ 下载成功后,解压缩,得到 mysql jd ...

  10. nginx 安装配置和常用命令

    基本环境:CentOS 1. 下载 nginx [root@localhost ~]# cd Downloads/ [root@localhost Downloads]# wget http://ng ...