`
guoyiqi
  • 浏览: 1001028 次
社区版块
存档分类
最新评论

网页爬虫,HttpClient+Jericho HTML Parser 实现网页的抓取

 
阅读更多
Jericho HTML Parser是一个简单而功能强大的Java HTML解析器库,可以分析和处理HTML文档的一部分,包括一些通用的服务器端标签,同时也可以重新生成无法识别的或无效的HTML。它也提供了一个有用的HTML表单分析器。
下载地址:http://sourceforge.net/project/showfiles.php?group_id=101067

HttpClient作为HTTP客户端组件与服务器进行通讯,同时使用了jdom进行XML数据的解析。

在对网页信息进行抓取时,主要会用到GET 方法

使用 HttpClient 需要以下 6 个步骤:

1. 创建 HttpClient 的实例

2. 创建某种连接方法的实例,在这里是 GetMethod。在 GetMethod 的构造函数中传入待连接的地址

3. 调用第一步中创建好的实例的 execute 方法来执行第二步中创建好的 method 实例

4. 读 response

5. 释放连接。无论执行方法是否成功,都必须释放连接

6. 对得到后的内容进行处理

在eclipse下建立工程 -->snatch
将上面下载的四个jar文件导入到项目路径中.
环境搭建完成

现在,首先介绍一下HttpClient的使用
在工程目录下创建test包,在包中创建Httpclient Test类

packagetest;
importjava.io.IOException;
importorg.apache.commons.httpclient.*;
importorg.apache.commons.httpclient.methods.GetMethod;
importorg.apache.commons.httpclient.params.HttpMethodParams;
publicclassHttpClientTest...{
publicstaticvoidmain(String[]args)...{
//构造HttpClient的实例
HttpClienthttpClient=newHttpClient();
//创建GET方法的实例
GetMethodgetMethod=newGetMethod("http://www.google.com.cn");
//使用系统提供的默认的恢复策略
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
newDefaultHttpMethodRetryHandler());
try...{
//执行getMethod
intstatusCode=httpClient.executeMethod(getMethod);
if(statusCode!=HttpStatus.SC_OK)...{
System.err.println(
"Methodfailed:"
+getMethod.getStatusLine());
}

//读取内容
byte[]responseBody=getMethod.getResponseBoy();
//处理内容
System.out.println(newString(responseBody));
}
catch(HttpExceptione)...{
//发生致命的异常,可能是协议不对或者返回的内容有问题
System.out.println("Pleasecheckyourprovidedhttpaddress!");
e.printStackTrace();
}
catch(IOExceptione)...{
//发生网络异常
e.printStackTrace();
}
finally...{
//释放连接
getMethod.releaseConnection();
}

}

}

这样得到的是页面的源代码.
这里 byte[]responseBody=getMethod.getResponseBoy();是读取内容
除此之外,我们还可以这样读取:
InputStream inputStream= getMethod.getResponseBodyAsStream();
String responseBody = getMethod.getResponseBodyAsString();


下面结合两者给个事例

取出http://www.ahcourt.gov.cn/gb/ahgy_2004/fyxw/index.html
中"信息快递"栏的前几条信息.
新建类CourtNews
packagetest;

importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;

importorg.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
importorg.apache.commons.httpclient.HttpClient;
importorg.apache.commons.httpclient.HttpException;
importorg.apache.commons.httpclient.HttpStatus;
importorg.apache.commons.httpclient.methods.GetMethod;
importorg.apache.commons.httpclient.params.HttpMethodParams;

importau.id.jericho.lib.html.Element;
importau.id.jericho.lib.html.HTMLElementName;
importau.id.jericho.lib.html.Segment;
importau.id.jericho.lib.html.Source;

/***//**
*
@authoroscar07-5-17
*
*/

publicclassCourtNews...{
privateintnewsCount=3;

privateListnewsList=newArrayList();

publicintgetNewsCount()...{
returnnewsCount;
}


publicvoidsetNewsCount(intnewsCount)...{
this.newsCount=newsCount;
}


publicListgetNewsList()...{
HttpClienthttpClient
=newHttpClient();
GetMethodgetMethod
=newGetMethod(
"http://www.ahcourt.gov.cn/gb/ahgy_2004/fyxw/index.html");
getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
newDefaultHttpMethodRetryHandler());

try...{
intstatusCode=httpClient.executeMethod(getMethod);
if(statusCode!=HttpStatus.SC_OK)...{
System.err
.println(
"Methodfailed:"+getMethod.getStatusLine());
}


StringresponseBody
=getMethod.getResponseBodyAsString();
responseBody
=newString(responseBody.getBytes("ISO-8859-1"),
"GB2312");
Sourcesource
=newSource(responseBody);

inttableCount=0;

for(Iteratori=source.findAllElements(HTMLElementName.TABLE)
.iterator();i.hasNext();tableCount
++)...{

Segmentsegment
=(Segment)i.next();

if(tableCount==13)...{

inthrefCount=0;
for(Iteratorj=segment
.findAllElements(HTMLElementName.A).iterator();j
.hasNext();)
...{
Segmentchildsegment
=(Segment)j.next();
Stringtitle
=childsegment.extractText();
title.replace(
""," ");
title
=trimTitle(title);
Elementchildelement
=(Element)childsegment;
if(hrefCount<newsCount)...{

String[]news
=newString[]...{
title,
"http://www.ahcourt.gov.cn"
+childelement
.getAttributeValue(
"href")}
;
newsList.add(news);
hrefCount
++;
}

}


}

}

}
catch(HttpExceptione)...{
System.out.println(
"pleasecheckyourprovidedhttpaddress!");
e.printStackTrace();
}
catch(IOExceptione)...{
e.printStackTrace();
}
finally...{
getMethod.releaseConnection();
}

returnnewsList;
}


privateStringtrimTitle(Stringtitle)...{
Stringtitlenew
="";

for(inti=0;i<title.length();i++)...{

if(Character.isSpaceChar(title.charAt(i)))
titlenew
+="";
else...{
titlenew
+=title.charAt(i);
}


}

returntitlenew;
}

publicstaticvoidmain(String[]args)...{
//TODOAuto-generatedmethodstub
CourtNewsjustice=newCourtNews();
justice.setNewsCount(
4);
Listlist
=justice.getNewsList();
Iteratorit
=list.iterator();
while(it.hasNext())...{
String[]news
=(String[])it.next();
System.out.println(news[
0]);
System.out.println(news[
1]);
}

}


}


<iframe width="490" scrolling="no" height="150" frameborder="0" align="middle" style="width: 490px; height: 150px;" src="http://www.blogbao.com/script.aspx?userid=45735&amp;AdType=0&amp;AdstyleID=46090&amp;Direction=1" marginheight="0" marginwidth="0"></iframe>
分享到:
评论

相关推荐

    基于SSM+maven+httpClient+jsoup实现小说网站项目.zip

    基于SSM+maven+httpClient+jsoup实现小说网站项目 基于SSM+maven+httpClient+jsoup实现小说网站项目 基于SSM+maven+httpClient+jsoup实现小说网站项目 基于SSM+maven+httpClient+jsoup实现小说网站项目 基于SSM+...

    基于SSM+maven+httpClient+jsoup实现小说网站项目源码.zip

    基于SSM+maven+httpClient+jsoup实现小说网站项目源码.zip 基于SSM+maven+httpClient+jsoup实现小说网站项目源码.zip 基于SSM+maven+httpClient+jsoup实现小说网站项目源码.zip 基于SSM+maven+httpClient+jsoup实现...

    Httpclient+testng接口测试小例子

    在"Httpclient+testng接口测试小例子"中,我们将使用以下步骤进行接口测试: 1. **环境准备**:首先,确保项目中已经添加了Apache HttpClient和TestNG的依赖。这些通常通过Maven或Gradle等构建工具进行管理,通过在...

    爬虫:httpclient+jsoup

    在IT领域,网络爬虫是一种自动化程序,用于从...总之,HttpClient和Jsoup是Java爬虫开发中的两个强大工具,它们结合使用能有效地抓取和解析网页信息。理解它们的工作原理和用法,对于构建高效的网络爬虫至关重要。

    httpClient+jsoup 抓取网页数据

    在"网易贵金属"的例子中,你可能需要使用HttpClient发送GET请求到网易贵金属的页面,然后使用Jsoup解析返回的HTML,找到包含贵金属价格、新闻等信息的部分,从而实现数据抓取。实际操作时,可能还需要考虑登录、分页...

    Java爬虫Jsoup+httpclient获取动态生成的数据

    在Web开发和数据抓取领域,Java爬虫技术是实现网页自动化信息提取的重要手段。本文主要讲述如何利用Java编程语言中的Jsoup库和HttpClient工具包来获取和解析动态生成的数据,特别是那些通过JavaScript动态加载的数据...

    httpClient+jsoup抓取网页数据实例和jar包

    在IT领域,网络爬虫是获取网页数据的重要手段,而HttpClient和Jsoup是两种常用的Java库,用于实现这一目的。HttpClient提供了低级别的HTTP通信能力,而Jsoup则是一个解析和操作HTML文档的强大工具。本教程将详细介绍...

    基于SSM+maven+httpClient+jsoup实现的java爬虫项目,一个完整的小说网站.zip

    【标题】中的“基于SSM+maven+httpClient+jsoup实现的java爬虫项目”揭示了这个Java项目的核心技术和用途。下面将详细解释这些技术及其在项目中的作用: 1. **SSM框架**:SSM是Spring、SpringMVC和MyBatis的缩写,...

    HttpClient+ Spring实现多线程

    标题 "HttpClient + Spring 实现多线程" 涉及到的是如何在Spring框架中使用Apache HttpClient库来创建一个支持多线程的HTTP客户端服务。Apache HttpClient是一个强大的HTTP客户端API,它提供了丰富的功能来处理HTTP...

    jsoup+httpclient+jar包

    **JSoup库** ...通过JSoup和HTTPClient的结合使用,开发者可以轻松构建功能丰富的网页爬虫,满足数据抓取和分析的需求。在实际应用中,需要注意遵守网络规范,尊重网站规则,以及有效地管理和优化爬虫性能。

    httpclient + jsoup java爬虫DEMO

    今天给大家分享一个多线程的知识点,和线程池,最近任务是写爬虫,五百个网址,循环很慢,然后考虑用多线程,今天看了一下多线程,氛围继承thread 和实现runnuble接口,差不多这么拼写的,区别在于runnuble接口可以...

    HTTPClient + MQ + servlet

    使用HTTPClient,开发者可以构建客户端应用,与远程服务进行数据交换,实现如API调用等功能。 其次,**MQ(Message Queue)**是消息中间件,它的主要作用是在不同的应用程序之间传递消息。在Java中,常见的MQ实现有...

    招标信息爬虫Java+html

    标题中的“招标信息爬虫Java+html”表明我们要讨论的是一个使用Java编程语言实现的网络爬虫,其目标是抓取网页上的招标信息。招标信息通常在网上公布,以供潜在的供应商参与竞标,这些信息可能包括项目名称、招标...

    学习网络爬虫必备,HttpClient+JSOUP

    包含jsoup-1.7.3.jar,jsoup-1.7.3-javadoc.jar,jsoup-1.7.3-sources.jar,com.springsource.org.apache.commons.httpclient-3.1.0.jar,org.apache.commons.httpclient.jar

Global site tag (gtag.js) - Google Analytics