`
ducaijun
  • 浏览: 155183 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

httpClient获取Jsoup解析网页

阅读更多

因项目需要从某个网站爬取一点数据,故我将爬取记录如下,以后说不定还能用得到呢,废话少说,进入正题:

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。

HttpClient 主页:http://hc.apache.org/httpcomponents-client-dev/index.html

jsoup是一个Java HTML Parser。能够从URL、文件或字符串解析HTML。利用DOM遍历或CSS选择器查找和抽取数据。能够操作HTML元素,属性和文本。能够依据一个白名单过滤用户提交的内容。

 

jsoup主页:http://jsoup.org/

具体的我就不解释了 自己度娘、谷哥去

 

要不找个例子先?!

 

比如就拿www.iteye.com首页来说吧,我想定时抓取iteye首页“精华文章”里面的数据

思路,用代码请求www.iteye.com首页,拿到首页的html代码,解析html代码,获取“精华文章”里面文章的连接地址在此请求该地址,拿下该文章,是吧?!ok,来看处理过程:

 

 先用浏览器打开www.iteye.com,可以用调试工具 firefox装上firebug chrome右击审核元素

以firefox为例:


可以发现“精华文章” 里面文章的全结构是

在id=“page”的div下面的 

   id=“content”的div下面的 

   id=“main”的div下面的

   class=“left”的div下面的

   id=“recommend”的div下面的

   ul下面的li下面的a标签

 

 

首先用httpClient获取首页html代码 我用的是httpClient4.1.2  jar包见附件 jsoup用的是jsoup-1.6.1.jar

 

/**
	 * 根据URL获得所有的html信息
	 * @param url
	 * @return
	 */
	public static String getHtmlByUrl(String url){
		String html = null;
		HttpClient httpClient = new DefaultHttpClient();//创建httpClient对象
		HttpGet httpget = new HttpGet(url);//以get方式请求该URL
		try {
			HttpResponse responce = httpClient.execute(httpget);//得到responce对象
			int resStatu = responce.getStatusLine().getStatusCode();//返回码
			if (resStatu==HttpStatus.SC_OK) {//200正常  其他就不对
				//获得相应实体
				HttpEntity entity = responce.getEntity();
				if (entity!=null) {
					html = EntityUtils.toString(entity);//获得html源代码
				}
			}
		} catch (Exception e) {
			System.out.println("访问【"+url+"】出现异常!");
			e.printStackTrace();
		} finally {
			httpClient.getConnectionManager().shutdown();
		}
		return html;
	}

上面是用httpClient获取html源文件的代码

下面就是对该html页面进行解析 得到我们想要的连接

 下面是jsoup处理得到的html源码

 

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JustTest {
	public static void main(String[] args) {
		String html = getHtmlByUrl("http://www.iteye.com/");
		if (html!=null&&!"".equals(html)) {
			Document doc = Jsoup.parse(html);
			Elements linksElements = doc.select("div#page>div#content>div#main>div.left>div#recommend>ul>li>a");
			//以上代码的意思是 找id为“page”的div里面   id为“content”的div里面   id为“main”的div里面   class为“left”的div里面   id为“recommend”的div里面ul里面li里面a标签
			for (Element ele:linksElements) {
				String href = ele.attr("href");
				String title = ele.text();
				System.out.println(href+","+title);
			}
		}
	}
}
 

 

其实jsoup的语法很简单,就是跟jquery一样用“#”取id,用“.”取样式位之后的数据 

 

其实都很简单的,当然,越规范的网页分析起来越容易,要是网页不规范就只好大家多写点代码咯

 

贴上Jsoup的API:http://jsoup.org/apidocs/

  • 大小: 116.7 KB
分享到:
评论
6 楼 ducaijun 2014-01-24  
grape88 写道
为什么需要HttpClient才能获得完整的网页? 而通过jsoup自带的就不能获得完整网页?
Document docItEye = Jsoup.connect("http://www.iteye.com").get()

jsoup的选择很强大,下面的方法即可选到:
Elements linksElements = docItEye.select("#recommend li a")

可以啊 主要是考虑哪些登录情况的网页爬去 还是HttpClient易用些吧
5 楼 grape88 2014-01-11  
为什么需要HttpClient才能获得完整的网页? 而通过jsoup自带的就不能获得完整网页?
Document docItEye = Jsoup.connect("http://www.iteye.com").get()

jsoup的选择很强大,下面的方法即可选到:
Elements linksElements = docItEye.select("#recommend li a")
4 楼 54zzb 2013-04-26  
54zzb 写道
楼主的jar包是不全的,jsoup-1.6.1.jar可以直接下载,但是httpClient提供的jar就缺少了,到官网http://hc.apache.org/downloads.cgi下载HttpClient 4.2.5 Binary下格式为zip的内容,然后解压后把lib里的jar包和jsoup-1.6.1.jar一并导入就是了

而且现在iteye首页改版了,代码中的linksElements要改为:           
Elements linksElements = doc.select("div#page>div#content>div#local>div#recommend>ul>li>a"); 
要运行楼主代码的同志们,适当的通过开发者工具看看最新的iteye首页布局

3 楼 54zzb 2013-04-26  
楼主的jar包是不全的,jsoup-1.6.1.jar可以直接下载,但是httpClient提供的jar就缺少了,到官网http://hc.apache.org/downloads.cgi下载HttpClient 4.2.5 Binary下格式为zip的内容,然后解压后把lib里的jar包和jsoup-1.6.1.jar一并导入就是了
2 楼 chen106106 2012-02-20  
楼主你好,可以上传完整的源代码吗?我试了一下,发现很多类就找不到。你提供的2个jar包都用了。
1 楼 lshhjxlj 2012-01-29  
好东西,感谢楼主分享!

相关推荐

    Jsoup解析Html获取新闻列表

    使用jsoup解析hmtl,获取对应数据

    Java_small-Applaction:使用HttpClient和Jsoup开发的Java爬虫,主要实现加载页面分析页面源代码并提取出相关数据

    利用jsoup解析字符串形式的html网页源代码 提取出课程的名称,分数,存储到一个Set集合中 开发流程: 通过浏览器分析网站的请求方式为get方式,所以在网址后面添加参数用户名和密码登录系统,实际通过用户自己输入...

    Jsoup+httpclient 模拟登陆和抓取

    * 模拟等录 后获取所需要的页面 * @param client * @param newUrl * @throws Exception */ private static String createHtml(HttpClient client, String newUrl) throws Exception { SimpleDateFormat ...

    jsoup-1.13.1.jar

    jsoup是一款Java的HTML解析器,主要用来对HTML解析在爬虫的时候,当我们用HttpClient之类的框架,获取到网页源码之后,需要从网页源码中取出我们想要的内容,就可以使用jsoup这类HTML解析器了。可以非常轻松的实现。

    java实现在线抓取网易云用户信息

    java实现在线抓取网易云用户信息,支持在线抓取网易云用户信息,用户头像,昵称,电话等等;抓取网易云音乐热门歌手及其歌曲、专辑等...使用HttpClient和Jsoup进行模拟请求并对网页进行解析;使用mybatis作为数据访问

    Java网络蜘蛛(爬c)源码.zip

    4. 内容解析:使用HTML解析器(如Jsoup)解析网页内容,提取需要的信息,如链接、文本、图片等。 5. 链接提取:从解析后的内容中提取出其他链接,用于进一步爬取。 6. 数据存储:将获取到的信息存储到数据库、文件或...

    Java网络爬虫小说下载器.zip

    使用httpclient,jsoup,dom4j,json-lib,SWT创建的可下载小说的网络爬虫项目。 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫...

    Java模拟登录正方教务抓取成绩、课表、空教室

    主要介绍了Java模拟登录正方教务抓取成绩、课表、空教室等信息,Java实现模拟登录正方教务抓取成绩、课表、空教室,通过HttpClient来模拟浏览器请求,Jsoup解析网页内容,感兴趣的小伙伴们可以参考一下

    java爬虫汇总.docx

    Apache HttpClient:一个用于发送HTTP请求的Java库,可以用于获取网页内容。 JSoup:一个基于Java的JavaScript解析器,可以用于解析HTML文档。 WebMagic:一个开源的爬虫框架,提供了一些高级特性,如自动化抽取和...

    搜索链接Java网络爬虫(蜘蛛)源码-zhizhu

    网页解析:利用Java的HTML解析库(如Jsoup、HtmlCleaner等)来解析网页的HTML结构,提取出所需的数据元素。 数据提取:根据特定的规则或正则表达式,从解析后的HTML中提取出目标数据。 多线程与异步处理:为了提高...

    Spider:通过多线程选择数据,并保存到excel

    通过HttpClient获取到请求页面的字符串字符串 通过jsoup解析 (解析需要自己在页面上查看源代码,分析DOM结构) (通过使用jsoup的css选择器的函数,获取元素,元素集,或者文本和属性值) 每一本书的值set进书实体...

    最简单的爬虫-WebMagic 0.73 源码

    作为爬虫框架,它使用httpclient作为获取网页工具、使用Jsoup作为分析页面定位抓取内容、使用ExecutorService线程池作为定时增量抓取、Jdiy作为持久层框架。不熟悉这些名词的同学们可以先行百度一下这些都是什么,起...

    java程序预报天气的小例子

    原理:通过HttpClient对象向中央气象台官网的城市天气查询服务页发送查询请求,获取响应后使用jsoup解析返回的html文档,将天气信息提取出来。使用时需要将附带的jar包添加到项目的classpath中。

    人人网高校信息库(json格式)

    我们既可以使用HttpClient来爬取这个js里的内容,通过jsoup等解析html,也可以使用正则表达式来获取json数据。非常方便,可以将获取的数据存入我们自己的数据库,构建我们自己的本地高校信息库,非常方便。

    Gecco是一款用java语言开发的轻量化的易用的网络爬虫.zip

    Gecco整合了jsoup、httpclient、fastjson、spring、htmlunit、redission等优秀框架,让您只需要配置一些jquery风格的选择器就能很快的写出一个爬虫。 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集...

    强力 Java 爬虫,列表分页、详细页分页、ajax、微内核高扩展、配置灵活.rar

    3、使用 Java 编写爬虫程序:使用 Java 编写爬虫程序,可以使用 Jsoup 等第三方库来解析 HTML 页面,获取需要的数据。 4、处理爬取到的数据:爬取到的数据需要进行处理,可以将数据保存到数据库中,或者生成 Excel ...

    ubk_spider_2015:银联信内部采集程序2015版

    ##银联信内部采集程序2015版 ###简介 这个主要是采集一些指定网址的新闻。...获取网页用的httpclient。 解析用的jsoup。 主要依赖cssPath。 数据保存在了mysql 中。 到目前为止 已经保存了3000万去重后的数据了。

    spider-utils:平时积累的爬虫工具

    httpclientDownloader apache的Httpclient包封装网页下载器 JsoupDownloader Jsoup封装下载,支持get,post,设置header和代理 selector(网页解析工具类) RegexSelector 正则表达式选择器 strporcess(字符串处理工具类...

    java开源包1

    3、连接复用,因此在多线程获取连接时无需阻塞; 4、同步调用; 5、超时机制; 6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换...

Global site tag (gtag.js) - Google Analytics