学习数据结构搜索的的意外收获哈。一个简单的基于java的网页抓取程序。
来源:互联网 发布:什么软件升级win10 编辑:程序博客网 时间:2024/05/24 06:36
最近在刷水题时,意外找到了一个水题嗅探神器,在这儿:http://blog.csdn.net/hu1020935219/article/details/11697109,大婶说这个是网络爬虫,使用各种搜索方法做出来的,其实就是我们学习的数据结构的图或者树 的遍历的原理而已。于是,遂对其十分感兴趣。
在图书馆恰好找到一本三年内被借了两次的书:《自己动手写网络爬虫》,开始学习如何编写网络爬虫。
看两天的书,总结一下的学习成果。(顺便复习Java,Java被我忘得差不多了)。
网络爬虫是一种基于一定规则自动抓取网络信息的脚本或则程序。
本文是用Java语言编写的一个利用指定的URL抓取网页内容并将之保存在本地的小程序。所谓网页抓取就是把URL中指定的网络资源从网络流中读取出来,保存至本地。类似于是用程序模拟浏览器的功能:把URL作为http请求的内容发送至服务器,然后读取服务器的相应资源。java语言在网络编程上有天然的优势,它把网络资源看做一种文件,它对网络资源的访问如同访问本地资源一样方便。它把请求与响应封装成流。java.net.URL类可对相应的web服务器发出请求并获得回应,但实际的网络环境比较复杂,如果仅适用java.net中的API去模拟浏览器功能,需要处理https协议、http返回状态码等工作,编码非常复杂。在实际项目中经常适用apache的HttpClient(需要用到HttpClient包)去模拟浏览器抓取网页内容。主要工作如下:
//创建一个客户端,类似打开一个浏览器HttpClient httpClient = new HttpClient();//创建一个get方法,类似在浏览器中输入一个地址,path则为URL的值GetMethod getMethod = new GetMethod(path);//获得响应的状态码int statusCode = httpClient.executeMethod(getMethod);//得到返回的类容String resoult = getMethod.gerResponseBodyAsString();//释放资源getMethod.releaseConnection();
完整代码如下:
/************ Java 实现最简单的网页抓取程序 ************///////////Written By C_Shit_Hu //////////////////////////// Time : 2013.9.20 library ////////////import java.io.FileWriter;import java.io.IOException;import java.util.Scanner;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpException;import org.apache.commons.httpclient.HttpStatus;import org.apache.commons.httpclient.methods.GetMethod;public class RetrivePage {private static HttpClient httpClient = new HttpClient();static GetMethod getmethod;public static boolean downloadPage(String path) throws HttpException,IOException {getmethod = new GetMethod(path);// 获得响应状态码int statusCode = httpClient.executeMethod(getmethod);if (statusCode == HttpStatus.SC_OK) {System.out.println("response="+ getmethod.getResponseBodyAsString());// 写入本地文件FileWriter fwrite = new FileWriter("hello.txt");String pageString = getmethod.getResponseBodyAsString();getmethod.releaseConnection();fwrite.write(pageString, 0, pageString.length());fwrite.flush();// 关闭文件fwrite.close();// 释放资源return true;}return false;}/** * 测试代码 */public static void main(String[] args) {// 抓取制指定网页,并将其输出try {Scanner in = new Scanner(System.in);System.out.println("Input the URL of the page you want to get:");String path = in.next();System.out.println("program start!");RetrivePage.downloadPage(path);System.out.println("Program end!");} catch (HttpException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}
编译文件时候注意导包的,将HttpClient(需要用到HttpClient包)全部导入工程,即可运行。
此包在这里:http://download.csdn.net/detail/hu1020935219/6293223
明天继续学习如何用搜索增强这条爬虫。。。
- 学习数据结构搜索的的意外收获哈。一个简单的基于java的网页抓取程序。
- 一个简单的基于java的网页抓取程序
- 意外收获-ruby编写的一个简单统计单词出现次数的程序
- 意外的收获
- 意外的收获
- 意外的收获
- 意外的小收获
- 意外的收获access
- 一个简单的基于Jsoup的HTML信息抓取Java程序
- 一个简单的网页抓取例子
- 一个抓取网页解析内容的程序。
- 整理屋子的意外收获
- 新公司的意外收获
- 足球课的意外收获
- JAVA抓取网页的简单实现
- java简单的抓取网页数据
- 一个特殊的dbcc命令--意外收获之dbcc tab
- 查重 -- 今天意外的一个小收获
- 阿里巴巴2014校招笔试题-2013年9月14日
- 20. 字符串转整数
- 浅析AOP与OOP
- 在线小说APP产品逻辑
- HDU 1000 java整数输入
- 学习数据结构搜索的的意外收获哈。一个简单的基于java的网页抓取程序。
- flash air中读取本地文件的三种方法
- fetch = FetchType.EAGER 作用
- 黑马程序员_网络编程
- 学习java的5种境界
- eclipse导出jar包的两种方式
- 【Android】android系统自带样式
- UVALive 3605 Roommate
- spring security3.x学习(15)_扩展JdbcDaoImpl。