利用HttpClient写的一个简单页面获取
2024-08-25 18:16:09
之前就听说过利用网络爬虫来获取页面,感觉还挺有意思的,要是能进行一下偏好搜索岂不是可以满足一下窥探欲。
后来从一本书上看到用HttpClient来爬取页面,虽然也有源码,但是也没说用的HttpClient是哪个版本的,而且HttpClient版本不一样,导致后面很多类也不一样。于是下载了最新的HttpCient版本,并且对着tutorial和网上的文档试着写一个简单的获取页面的例子,最终证明是可行的,但是也遇到了不少问题,而且这个例子也十分简单。
import java.io.IOException;
import java.net.UnknownHostException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream; import org.apache.http.HttpEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.message.AbstractHttpMessage; public class Simplest {
private void Get() {
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
String HostName = "http://www.baidu.com";
HttpGet httpget = new HttpGet(HostName);
System.out.println(httpget.getURI());
//HttpGet httpget = new HttpGet("http://www.lietu.com");
CloseableHttpResponse response = httpclient.execute(httpget);
System.out.println("Successful!");
System.out.println(response.getProtocolVersion()); //Protocol Version
System.out.println(response.getStatusLine().getStatusCode()); //Status Code
System.out.println(response.getStatusLine().getReasonPhrase());
System.out.println(response.getStatusLine().toString()); //get entity
HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream input = entity.getContent();
String filename = HostName.substring(HostName.lastIndexOf('/')+1);
System.out.println("The filename is: " + filename);
OutputStream output = new FileOutputStream(filename); int tempByte=-1;
while ((tempByte=input.read())>0) {
output.write(tempByte);
} if (input != null) {
input.close();
} if (output != null) {
output.close();
}
}
} catch(UnknownHostException e) {
System.out.println("No such a host!");
} catch(IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
Simplest a = new Simplest();
a.Get();
System.out.println("This is a test");
}
}
代码倒是不长,刚开始搞这个啥也不懂,不过最后还是获取了页面,感觉挺有意思的。
代码编译需要两个jar包,httpclient-4.5.2.jar和httpcore-4.4.4.jar将其和源文件Simplest.java放到同一个目录下。
编译过程为:javac -cp httpcore-4.4.4.jar:httpclient-4.5.2.jar Simplest.java
运行过程为:java -cp .:httpclient-4.5.2.jar:httpcore-4.4.4.jar:Simplest:commons-logging-1.2.jar Simplest
之前也搜了好久在命令行怎么导入jar包之类的,基础不牢就是这样的。
接下来的工作就是从简单到复杂,不断扩充爬虫的能力和功能了,包括页面信息提取等。
最新文章
- 3.一般用AE开发的时候都会报错,具体只要加一行代码就行
- Eclipse+MinGW+Boost环境搭建
- ruby -- 进阶学习(八)自定义方法route配置
- 64位Ubuntu 13.04 安装Bochs 2.3.5
- hadoop2 环境的搭建(手动HA)
- WebApp开发框架Ionic+AngularJS+Cordova
- IE6\ IE7、IE8\9\10和Firefox的hack方式
- 红豆带你从零学C#系列之——初识C#
- mysql必知必会
- servlet3.0注解loadOnStartup不起作用解决方案
- Swift 使用 日常笔记
- Elasticsearch+Mongo亿级别数据导入及查询实践
- C#中将鼠标光标变为忙碌状态
- elementUI el-input focus
- [转]编程珠玑第五章二分搜索(折半查找)之java实现
- Apache Beam: 下一代的大数据处理标准
- Centos7初始配置
- 基于Redis分布式锁(获取锁及解锁)
- Postman—添加断言和检查点
- YUV422(UYVY)转RGB565源代码及其讲解.md
热门文章
- coding云(git)远程创建版本库和上传文件
- 算法:辗转相除法【欧几里德算法(Euclidean algorithm)】
- useradd或者userdel相关用户管理命令不好用
- 【LeetCode】131. Palindrome Partitioning
- [转]Splay Tree
- pdb文件 PDB文件:每个开发人员都必须知道的 .NET PDB文件到底是什么?
- C#继承IDisposable释放资源
- 修改TreeList单元格格式(实现类似单元格合并效果)
- Spring Boot热部署(springloader)
- Python shell对比