网络爬虫入门(二)模拟提交以及HttpClient修正
模拟提交就是说我们不自己登陆到客户端,仅仅靠发送请求就模拟了客户端的操作,在现实使用的时候经常用来接收一些需要登录才能获取到的数据,来模拟表单的提交,所以很多时候也被称作虚拟登录,这次的例子是我自己为学校实验室开发的官方网站的纳新报名系统,设置有一个管理员,管理员通过登录就可以查看报名人的信息,做一个虚拟登录来获取到报名信息页面,因为如果没有登录直接到达这个页面,页面是不给访问的,具体技术我开发的时候用到了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修正的更多相关文章
- 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
[网络爬虫入门02]HTTP客户端库Requests的基本原理与基础应用 广东职业技术学院 欧浩源 1.引言 实现网络爬虫的第一步就是要建立网络连接并向服务器或网页等网络资源发起请求.urllib是 ...
- 2.Python爬虫入门二之爬虫基础了解
1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...
- Python爬虫入门二之爬虫基础了解
1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...
- 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫
[网络爬虫入门01]应用Requests和BeautifulSoup联手打造的第一条网络爬虫 广东职业技术学院 欧浩源 2017-10-14 1.引言 在数据量爆发式增长的大数据时代,网络与用户的沟 ...
- 爬虫入门二 beautifulsoup
title: 爬虫入门二 beautifulsoup date: 2020-03-12 14:43:00 categories: python tags: crawler 使用beautifulsou ...
- 【网络爬虫入门04】彻底掌握BeautifulSoup的CSS选择器
[网络爬虫入门04]彻底掌握BeautifulSoup的CSS选择器 广东职业技术学院 欧浩源 2017-10-21 1.引言 目前,除了官方文档之外,市面上及网络详细介绍BeautifulSoup ...
- 【网络爬虫入门05】分布式文件存储数据库MongoDB的基本操作与爬虫应用
[网络爬虫入门05]分布式文件存储数据库MongoDB的基本操作与爬虫应用 广东职业技术学院 欧浩源 1.引言 网络爬虫往往需要将大量的数据存储到数据库中,常用的有MySQL.MongoDB和Red ...
- 脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?
1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机 ...
- 【网络爬虫入门03】爬虫解析利器beautifulSoup模块的基本应用
[网络爬虫入门03]爬虫解析利器beautifulSoup模块的基本应用 1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.B ...
随机推荐
- 认识python正则模块re
python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...
- javascript绑定事件addEventListener与attachEvent
1.eleObj.addEventListener(eventName,handle,useCapture); eleObj:DOM元素: eventName:事件名称.注意,这里的事件名称没有“ o ...
- 【es6】字符串扩展
8.模板字符串 模板字符串(template string)是增强版的字符串,用反引号(`)标识.它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量. ${}中可以放 1. ...
- Idea查看代码相关技巧
(1)查看类中的属性与方法快捷键 Alt+7 (2)查看方法被调用 在方法上右键find usages (3)查看方法说明 Ctrl+Q
- H5+百度地图定位
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用github oauth 出现 OpenSSL::SSL::SSLError - SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 解决
A top level initializer is highly recommended to use: conf/initializer/tls_settings.rb OpenSSL::SSL: ...
- C#控制台程序,运行完窗口不退出的方法
.... static void Main(string[] args){ Console.WriteLine("运行完后不退出窗口"); Console.ReadKey();// ...
- C#中复制数组
string array = new string[]{"abc", "bcd", "efg"}; string bArray = new ...
- 数据库分库分表(一)常见分布式主键ID生成策略
主键生成策略 系统唯一ID是我们在设计一个系统的时候常常会遇见的问题,下面介绍一些常见的ID生成策略. Sequence ID UUID GUID COMB Snowflake 最开始的自增ID为了实 ...
- 迁移SharePoint搜索服务至新的服务器
转自:http://blog.fpweb.net/move-sharepoint-2013-search-components-to-new-server/#.V_w4JZH_6uh In this ...