- 浏览: 285957 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
86614009:
如何在service层,如何获取绑定到当前线程的entitna ...
使用spring的OpenEntityManagerInView -
yajunyajun2011:
好帖子 怎么没人顶呢
Java 正则表达式最大,最小匹配问题 -
xtuali:
能说明一下,你的nutch是哪个版本的吗?谢谢!
搜索引擎Nutch源代码研究之一 网页抓取(1) -
dongmusic:
需要学习这么多的东西,吐血中...
如何提高Java开发能力 -
jiminsc:
cool
LDAP 验证、添加、修改、删除(转)
1.1 概述
在开发工作中,往往有些需求是需要获取某些网页中的内容。针对这一问题,目前可以采用先获取网页内容,然后对网页内容进行解析,并重新排版的方式来解决。
1.2 资源
1) JDK 1.5.06
2) HTMLParser2.0
地址:http://sourceforge.net/project/showfiles.php?group_id=24399&package_id=47712
2 对网页内容的获取和解析
2.1 HTTPLook的使用
在我们模仿IE访问之前,我们首先需要知道每次请求的包头信息和请求方式以及发送的内容,并且需要知道,响应包的包头和响应内容,这样我们才能完整正确的发送请求。这个步骤我们可以采用一个小工具HTTPLook来实现,HTTPLook可以实现对请求和响应的监视。HTTPLook在网上可以随意下载,我下载的地址是http://www.crsky.com/soft/3786.html,下载完成后双击安装,一路NEXT即可,软件的主界面如下。
在操作之前,点解上图中的绿色箭头即可。
2.2 获取网页内容
我们可以采用java.net包中的HttpURLConnection类和URL类来产生和发送请求,并且获取网页。只要流程包括
1)设置采用POST方式时候,发送的请求内容
2)设置请求地址
3)打开链接
4)获取COOKIE,这一步可以有也可以没有,如果在HTTPLook截获的请求信息中包含COOKIE时,这是需要次步。
5)设置请求头中的信息
6)发送请求
7)获取响应的HTML页面
8)关闭连接
具体的步骤如下列出:
首先需要定义两个全局变量,如下:
HttpURLConnection httpConn = null;
URL url = null;
这里列出了用到方法,用来调用和重用。代码如下:
/**
* 主方法,执行页面下载和解析的业务逻辑过程
* @param idCard
* 身份证号码
* @param passwordStr
* 个人密码
*
* @return 字符串
*/
public String downLoadPages(String idCard,String passwordStr){
String result = "";
try{
String s = ""; //采用POSTT方式时候,发送的请求内容,根据需求设定
String urlStr = ""; //请求地址,,根据需求设定
openHttpURLConnection(urlStr,"GET"); //打开链接
String head = getHeadValue("Set-Cookie");//获取COOKIE
String temp1 = getHtmlStr("GBK"); //获取响应的HTML页面
close(); //关闭连接
//再一次访问
urlStr = "http://www.njgjj.com/logonbyidcard.do;"+head; //请求地址
openHttpURLConnection(urlStr,"POST"); //打开链接
setHeadValue("Cookie",head); //设置请求头中的COOKIE信息
setHeadValue("Content-Length",String.valueOf( s.length())); //设置请求发送内容的长度
setHeadValue("Content-type","application/x-www-form-urlencoded");
sendRequest(s); //发送请求
String result = getHtmlStr( "GBK");//获取响应的HTML页面
close();//关闭连接
System.out.println(result);
System.out.println("------------------------------------------------------");
/** 解析页面 */
result = parseHtml(result.trim().replaceAll("TH","td"));
}catch(Exception e){
e.printStackTrace();
} finally {
try {
if (httpConn != null){
httpConn.disconnect();
httpConn = null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return result;
}
注意:主方法列出了业务逻辑
/**
* 关闭连接
*/
public void close(){
try{
if (httpConn != null){
httpConn.disconnect();
httpConn=null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* 获取响应包头信息的参数
*/
public String getHeadValue(String key){
String returnValue = "";
try{
int code = httpConn.getResponseCode();
if (code != HttpURLConnection.HTTP_OK) {
System.out.println("error code " + String.valueOf(code));
returnValue = String.valueOf(code);
}else{
//Map map = httpConn.getHeaderFields();
//Set set = map.keySet();
//Iterator it = set.iterator();
//while(it.hasNext()){
// System.out.println("next ---"+it.next());
//}
returnValue = httpConn.getHeaderField(key);
}
} catch (Exception e) {
e.printStackTrace();
}
return returnValue;
}
/**
* 在请求头中添加参数
*/
public void setHeadValue(String key,String value){
try {
httpConn.setRequestProperty(key, value);
} catch (Exception e) {
e.printStackTrace();
try {
if (httpConn != null){
httpConn.disconnect();
httpConn=null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
/**
* 发送请求
*/
public void sendRequest(String sendStr){
OutputStream outputstream = null;
try {
outputstream = httpConn.getOutputStream();
outputstream.write(sendStr.getBytes());
outputstream.flush();
} catch (Exception e) {
e.printStackTrace();
try {
if (outputstream != null){
outputstream.close();
outputstream=null;
}
if (httpConn != null){
httpConn.disconnect();
httpConn=null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
/**
* 打开连接,设置默认请求参数
*/
public void openHttpURLConnection(String inUrlStr,String method) {
String urlStr = inUrlStr;
int chByte = 0;
String returnStr = ""; //返回值
try {
url = new URL(urlStr);
httpConn = (HttpURLConnection) url.openConnection();
HttpURLConnection.setFollowRedirects(true);
httpConn.setUseCaches(false);
httpConn.setDoOutput(true);
httpConn.setDoInput(true);
httpConn.setRequestMethod(method);
httpConn.setRequestProperty("User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)");
httpConn
.setRequestProperty(
"Accept",
"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*");
httpConn.setRequestProperty("Connection", "Keep-Alive");
} catch (Exception e) {
e.printStackTrace();
try {
if (httpConn != null){
httpConn.disconnect();
httpConn=null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
/**
* 从响应包体中获取HTML页面内容
*/
public String getHtmlStr(String encode){
InputStream in = null;
String returnHtmlStr = "";
try{
int code = httpConn.getResponseCode();
if (code != HttpURLConnection.HTTP_OK) {
System.out.println("error code " + String.valueOf(code));
returnHtmlStr = String.valueOf(code);
}else{
in = httpConn.getInputStream();
String webpage;
StringBuffer bf = new StringBuffer();
int c;
while (((c = in.read()) != -1)) {
int all = in.available();
byte[] b = new byte[all];
in.read(b);
webpage = new String(b, encode);
//webpage = new String(b);
bf.append(webpage);
}
String outStr = new String(bf.toString());
returnHtmlStr = outStr;
}
} catch (Exception e) {
e.printStackTrace();
try {
if (in != null)
in.close();
if (httpConn != null){
httpConn.disconnect();
httpConn=null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
return returnHtmlStr;
}
2.3 解析页面
当页面获取成功后,下一步需要做的就是解析页面了。此时就用到了HTMLPARSER包。HTMLPARSER包的下载地址请参考前言部分。
我们假设需要获取HTML页面中的一个span和一个table的内容,所以只要简单的列出了解析SPAN和TABLE的内容的方式,以做抛砖引玉的作用,具体请参考HTMLPARSER的帮助文档,帮助文档的软件包的下载地址处可以同时下载获得。
具体代码如下:
/**
* 在指定表中查找指定行、指定列的值<
发表评论
-
修改XHTML元素
2011-05-16 14:53 699修改XHTML元素通常通过修改如下几个常用属性来实现: 1. ... -
HTML解析器软件
2011-01-07 14:38 7434HTML解析器软件 ... -
将Unicode字符转换成中文
2011-01-04 16:12 1061public static String ToChines ... -
URL编码与中文的转换
2011-01-04 14:56 1507public static String Encode ... -
htmlparser 去除html标签体(获取body,title纯文本)
2010-12-29 20:38 2654package test; import java.io.* ... -
htmlparser提取网页正文
2010-12-19 19:02 1920Java代码 mport org.ht ... -
如何分析网页-----使用HtmlParser(1)
2010-12-19 13:42 1135如何分析网页-----使用Ht ... -
用nekohtml来获取网页指定内容
2010-12-01 19:15 1150用nekohtml来获取网页指定内容 下载地址 http:/ ... -
nekohtml的简单使用
2010-12-01 09:01 1539做了一段时间的网页解析的工作,有了些体会, ... -
Neko的简单使用
2010-11-29 21:42 1185做了一段时间的网页解析的工作,有了些体会,写出来和大家分享。 ... -
NekoHTML学习笔记
2010-11-29 21:18 1432NekoHTML学习笔记文章分 ... -
遍历网站的所有Url
2010-11-29 19:42 2646网站的url分为很多种类:<a href=" ... -
htmlparser使用指南
2010-11-29 19:41 998转载:http://www.yeeach.com/2008 ...
相关推荐
在IT领域,尤其是在Web开发中,提取网页信息是一项常见的任务。C#作为.NET框架下的主要编程语言,提供了强大的工具和库来实现这一功能。在这个实例中,我们将探讨如何结合C#中的正则表达式(Regular Expressions)和...
本文将详细介绍如何利用HtmlParser这一开源工具来提取网页中的关键信息,并通过数据清洗将其存储到SQL数据库中,以便后续的数据分析和应用。 #### 二、HtmlParser概述 HtmlParser是一种轻量级、高效且易于使用的...
本文主要介绍了如何利用HttpClient与HTMLParser这两种技术来实现网页正文的提取。文章首先阐述了互联网信息飞速增长的背景下,网页数据提取的重要性,以及自动化的网页抓取与分析对于科研、工程和商业活动的意义。...
总之,Java利用HTMLParser库可以有效地抓取和解析网页数据,为数据分析、信息监控等任务提供便利。通过不断学习和实践,你可以掌握更多高级技巧,实现更复杂的功能。记得在使用过程中遵守互联网道德,尊重网站的...
在网页抓取和信息采集领域,HTMLParser 提供了高效的处理机制,能够帮助开发者有效地解析复杂的HTML结构,提取所需的数据。以下是对HTMLParser及其在网页信息抽取中应用的详细说明: 1. **HTMLParser基本概念**: ...
### HTMLParser提取网页超链接研究 #### 一、引言 随着互联网技术的快速发展和普及,全球信息资源呈爆炸式增长。在这个过程中,各种互联网搜索引擎(例如百度、谷歌等)应运而生,它们极大地便利了人们获取所需...
总结来说,HTMLParser 提供了一个高效且结构化的接口来解析HTML文档,结合正则表达式的清理,我们可以有效地提取网页的正文和标题。在进行这样的操作时,需要注意正确处理各种HTML标签和结构,以确保提取到的信息...
总结来说,"htmlparser抓取网页内容"项目展示了如何利用Python的HTMLParser库从特定网站抓取专利状态信息,涵盖了网络请求、HTML解析、数据提取等多个IT技术点。在实践中,开发者需要具备HTML和HTTP的基础知识,以及...
这在进行网络爬虫开发时非常有用,可以提取出网页中的所有链接,进行进一步的分析或者访问。 HTMLParser库还支持事件驱动的解析模式,这意味着开发者可以注册监听器来处理解析过程中遇到的各种事件,比如开始解析一...
它可以识别HTML标签、属性、文本等元素,使得开发者能够方便地提取网页中的结构化信息。 2. **网页爬虫的基本原理**:网页爬虫通过发送HTTP请求到目标网站,获取HTML响应,然后解析这些HTML内容来提取所需信息。在...
HTMLParser是Python中用于解析HTML文档的一个库,它允许开发者高效地从网页中提取所需的数据。在Web开发和数据挖掘领域,爬虫技术是获取大量网络数据的重要手段,而HTMLParser则是实现这一目标的关键工具之一。本文...
比如,你可以使用它来提取网页上的特定数据,如价格、评论、链接等;也可以用于验证网页的结构是否符合预期,或者在不影响页面展示的情况下替换或添加HTML元素。 6. 扩展性:HTMLParser提供了丰富的API,允许开发者...
2. **WebParser**:可能是一个简单的网页抓取器,利用HtmlParser解析网页,提取所需信息,例如新闻标题、链接等。 开发者可以打开`AnalyzeHtml.sln`,编译并运行这两个项目,以了解HtmlParser的具体使用方法和实际...
### HTMLParser抽取Web网页正文信息的关键知识点 ...通过上述步骤,HTMLParser不仅能够高效地从网页中提取正文信息,还能通过一系列智能算法确保提取的内容与主题高度相关,极大地提高了信息处理的效率和质量。
"htmlparser实现从网页上抓取数据.doc"文件则很可能是一个详细的教程,指导用户如何利用HTMLParser库进行网页数据抓取。在这个教程中,可能会涵盖以下关键知识点: 1. **安装和引入HTMLParser**:首先,用户需要将...
HtmlParser是一个用于网页抓取和解析的库,它能够帮助开发者高效地提取HTML文档中的信息并将其转换为结构化的XML格式。在Web开发中,这样的工具对于数据挖掘、搜索引擎优化(SEO)、网络爬虫和自动化信息处理至关...
信息抽取模块是系统的核心,它利用HTMLParser解析网页,并结合正则表达式进行模式匹配,以提取特定类型的信息。在本案例中,重点在于电子邮件地址的抽取。通过分析网页源代码,模块能够识别出符合电子邮件格式的字符...