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

    一般Iterm2是结合oh-my-zsh一起使用,但是如果不喜欢zsh也可以单独使用.Iterm2有个亮点就是可以通过快捷键快速启动. 安装步骤: 1.下载: http://www.iterm2.co ...

  2. JVM-类加载过程(Java类的生命周期)

    什么是类加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的 ...

  3. Windows Server 2003、2008、2012系统的安装

    说在前面的话 Windows Server 2003,和Windows XP十分相似,可以简单地认为Windows Server 2003是在Windows XP的基础上多了一些服务器管理和操作的功能 ...

  4. 关于chrome浏览器事件拖动的bug(首次点击的时候也触发move的事件)

    在做R80web的时候出现一个奇怪的现象,chorme现在的版本还是存在,拖动事件有mousedown.mousemove.mouseup组成,但是首次click以及失去焦点再重新点击的时候同样会触发 ...

  5. 事务实现,redo,undo,锁

    事务(Transaction)是数据库区别于文件系统的重要特性之一.在文件系统中,如果你正在写文件,但是操作系统突然崩溃了,这个文件就很有可能被破坏.当然,有一些机制可以把文件恢复到某个时间点.不过, ...

  6. LINQ的查询标准操作汇总

    记录LINQ的查询标准操作

  7. WCF中的AddressHeader作用

    客户端发送请求给服务端,服务端根据请求消息把消息转发给对应的终结点.这里面有个消息筛选机制,如果请求消息中带有地址报头相关信息,则会用地址报头匹配当前的所有终结点.所以默认情况下客户端和服务端的地址报 ...

  8. .NET MVC自定义Html辅助方法

    using System;using System.Web.Mvc;using System.Web.Routing; namespace MvcTest2.Helpers{ public stati ...

  9. 后台数据校验-BeanCheck

    package com.ldf.domain; import java.text.ParseException; public class UserCheck { //从表单获取的数据 private ...

  10. 【SSH网上商城项目实战24】Struts2中如何处理多个Model请求

       转自: https://blog.csdn.net/eson_15/article/details/51465067 1. 问题的提出 Struts2中如果实现了ModelDriven<m ...