关闭

Jsoup解析HTML页面数据(又扒到1万+的数据)

标签: Jsoup解析HTML页面数据
11844人阅读 评论(0) 收藏 举报
分类:
昨天想用Jsoup抓取一个页面中的歇后语,没想到竟然遇到了这么一个奇葩问题,解析多条相同的数据的时候只解析到1条数据
比如解析如下内容
<tr class="even">
<td>坐轿里骂人</td>
<td><a href="http://c.bumiu.cn/ju?wd=%B2%BB%CA%B6%CC%A7%BE%D9" target="_blank">不识抬举</a></td>
</tr>
<tr class="odd">
<td>坐轿打瞌睡</td>
<td><a href="http://c.bumiu.cn/ju?wd=%B2%BB%CA%B6%CC%A7%BE%D9" target="_blank">不识抬举</a></td>
</tr>

我解析td标签中的文本应该得到4条数据,但是得到的却只有
“坐轿里骂人
不识抬举
坐轿打瞌睡“

少了一个“不识抬举”,在网上搜了搜,没搜到相关的解决方案,后来用别人写的一个在线的例子,竟然出奇的抓到了所有的数据,难倒我写的代码有问题?后来经过一番折腾,发现代码没问题,是jar包的问题,我原来用的是jsopu-1.8.3.jar换成最新的jar包Jsoup-1.9.2就自然解决了……竟然是之前Jsoup未解决的bug,幸好被后来修复了。

那就分享一下我解析网页的源码好了,虽然网上已经多的是了,分享给正好看到的朋友

public class QueryAndSaveData {
	int pageid = 1;
	@Test//第6页出问题了
	public void test() {
		long start = System.currentTimeMillis();
		while (pageid<=702) {
			String url = "http://tool.chasfz.com/xiehouyu/?pageid="+pageid;
			saveXieHouYu(url);
		}
		long end = System.currentTimeMillis();
		System.out.println("timeGaps:"+(end-start));
	}

	private synchronized void saveXieHouYu(String url) {
		String serverString = HttpUtils.request(url,null);//网络请求数据,没有使用jsoup连接网络获取数据,感觉自己封装的网络请求时间更短
		Document document = Jsoup.parse(serverString);//可以使用Jsoup自带的网络请求方式:Jsoup.connect(url).timeout(5000).get();
//		String string = document.toString();
//		System.out.println("document:"+string);
		Elements divsElements = document.select("table");//得到table标签中的内容
//		String divString = divsElements.toString();
//		System.out.println("divString:"+divString);
		Elements tds = divsElements.select("td");//获得table中的所有的td标签
		XieHouYuDao xieHouYuDao = new XieHouYuDao();
		int len = tds.size();
		boolean flag = false;
		System.out.println("td的长度:"+len);
		for (int i = 0; i < tds.size(); i+=2) {
			//将解析到的数据依次存入数据库,下标为偶数的为问题,奇数的为答案
			flag = xieHouYuDao.add(new Xiehouyu(tds.get(i).text(), tds.get(i+1).text()));//select("td").text()即可获得到标签中的内容			//System.out.println(tds.get(i).text()+","+ tds.get(i+1).text());
System.out.print(flag);}if (!flag) {System.out.println();//打印出未被成功插入数据库的页数System.out.println("未成功插入的pageid:"+pageid);}pageid++;}}


如果想获取网页中的连接,使用select("a").attr("href"),有的网站的超链接用的是相对路径,我们把它抓取下来的时候一定要换成绝对路径,这样我们在直接访问的时候才不至于说找不到页面 

for (Element item : items) {
	  Elements links = item.select("a");
	  for(Element link: links){
		  link.attr("href",link.attr("abs:href"));
	  }
	  
	  Elements imgs = item.select("img");
	  for(Element img: imgs){
		  img.attr("src",img.attr("abs:src"));
	  }

以上代码将会得到对应链接的绝对路径,其中属性为abs:href。同理,可以得到图片绝对路径abs:src。


Elements pngs = doc.select("img[src$=.png]");// 所有引用 png 图片的元素
  		 for(Element png:pngs){
  			 String pngText=png.text();
  			 String src=png.attr("src");//根据属性名获取src的路径
  			 System.out.println(src+pngText);
  		 }
  		 //在id为tel的td标签里面添加一个value等于121212121的值 如:<td id="tel" value="121212121"></td>
  		 doc.getElementById("tel").val("121212121");//
  		 //在id为tel的td标签添加一个文本值 如:<td id="tel">121212121</td>
  		 doc.getElementById("tel").html("121212121");



3
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Jsoup解析HTML实例及文档方法详解

这篇文章主要介绍了Jsoup如何解析一个HTML文档、从文件加载文档、从URL加载Document等方法,对Jsoup常用方法做了详细讲解,最近提供了一个示例供大家参考 使用DOM方法来遍历一个文档 ...
  • u011396691
  • u011396691
  • 2016-06-28 10:17
  • 2439

jsoup:解析HTML用法小结

1.解析方式  (1)从字符串解析  ? 1 2 3 String html = "First parse"   ...
  • hong0220
  • hong0220
  • 2014-11-15 00:28
  • 18503

Java中使用jsoup解析HTML

1
  • ljtyzhr
  • ljtyzhr
  • 2014-09-11 11:21
  • 1021

Jsoup解析html的基本用法

这周学习了Jsoup的基本用法,感觉Jsoup解析html文本和dom解析xml大同小异。学习过xml解析的朋友如果学习Jsoup上手很快。没学过的朋友也没关系,Jsoup很简单下面我们一起来学习: ...
  • xaingge
  • xaingge
  • 2016-05-30 20:32
  • 715

使用Jsoup简单解析HTML文件示例

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。在Java...
  • Roy_70
  • Roy_70
  • 2017-05-17 21:51
  • 1314

Jsoup解析HTML获取数据

前言   当进行和网络相关的开发,我们总是希望能够有API接口供我们调用,但是有时候我们并不是总能够找到API,就像我之前在做在线音乐播放器的时候,找百度的API接口就找了好长的时间,如果没有API的...
  • ProgramChangesWorld
  • ProgramChangesWorld
  • 2015-07-29 21:27
  • 1693

Jsoup解析html某片段的问题

案例 问题分析 解决办法案例在使用jsoup解析html中的某部分片段时,有时候会遇到解析不出字段。下面以案例进行讲解。 北京 ...
  • qy20115549
  • qy20115549
  • 2016-12-10 10:38
  • 1551

jsoup:解析HTML用法小结

1.解析方式  (1)从字符串解析  String html = "First parse Parse HTML into a doc."; Document doc = Jsoup.parse(ht...
  • u012532559
  • u012532559
  • 2016-03-24 17:19
  • 578

jsoup解析HTML用法小结

使用HttpClient+jsoup做采集器有一段时间了,发现jsoup很好用,而且还有很多方便的东西都没怎么用上。于是想根据官网上的cookbook来对jsoup的使用做个小结,或者是归纳。按功能分...
  • jyg694234697
  • jyg694234697
  • 2015-03-11 17:06
  • 590

jsoup解析html

jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据 ...
  • LJHABC1982
  • LJHABC1982
  • 2011-09-22 17:26
  • 10744
    个人资料
    • 访问:1015572次
    • 积分:9937
    • 等级:
    • 排名:第2040名
    • 原创:148篇
    • 转载:49篇
    • 译文:5篇
    • 评论:175条
    个人博客
    博客专栏
    最新评论
    个人博客
    Fork me on GitHub