一个简单的Jsoup抓取页面信息的例子

原创 2018年04月16日 19:59:31
简介:
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
在本文,本人将教大家如何使用jsoup抓取一些简单的页面信息

准备:
jsoup的jar包:https://jsoup.org/download
开发工具:eclipse

思路:
我们首先利用jsoup把网络上的html解析成字符串,然后把字符串转换成Document,然后选取某些我们想要的信息遍历出来。

流程:
1.创建一个web项目,起好项目名,导入jar包


lombok是为了省略get和set方法的,详细请参阅https://blog.csdn.net/qq_41441210/article/details/79891093
2.创建目录结构

model中的News是封装的新闻实体对象
utils中的Spider是我们写的一个工具类
test中的JsoupTest是我们写的一个测试类
3.代码如下


实体类:
package com.rzc.model;

import lombok.Data;

@Data // lombok注解,相当于get、set方法和toString等都默认生成
public class News {
	
	private String title; // 新闻标题
	private String article; // 新闻内容
	private String publishTime; // 新闻发布时间
	private String keyword; // 新闻关键字
	private String author; // 新闻作者
}
工具类:
package com.rzc.utils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

import com.rzc.model.News;

public class Spider {

	// 获取页面加载内容
	public Document loadDocumentData(String url) {
		
		// 创建文档对象
		Document doc = null;
		// 根据url将某页信息转换成文档
		try {
			doc = Jsoup.connect(url).get();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		// 返回文档
		return doc;
	}

	// 获取a标签中的href的内容
	public List<String> parseDoc(Document doc) {
		// 实例化list
		List<String> list = new ArrayList<String>();
		// 根据指定class获取对象(这里我们查看页面源码,选取了一个class为 new_top 的新闻 列表)
		Elements elements = doc.getElementsByClass("news_top");
		// 根据指定的标签获取连接内容(这里选取的是a标签中的内容)
		Elements links = elements.get(0).getElementsByTag("a");
		for (int i = 0; i < links.size(); i++) {
			// 讲遍历出来的每一个a标签对象中的href属性循环存入list中
			list.add(links.get(i).attr("href"));
		}
		// 返回list
		return list;
	}

	// 按照要求获取news对象
	public News parseDetaile(Document doc) {
		// 实例化news对象
		News news = new News();
		// 按照class获取文档对象 main_title的文本信息,并将该信息存入title中
		String title = doc.getElementsByClass("main_title").text();
		// 查照选择器data-sourse后面的.data信息,并将该信息存入publishTime中
		String publishTime = doc.select(".data-sourse > .data").text();
		// 按照class获取文档对象 caricle 的文本信息,并将该信息存入 article 中
		String article = doc.getElementsByClass("article").text();
		// 按照class获取文档对象 keyword 的文本信息,并将该信息存入 keyword 中
		String keyword = doc.getElementsByClass("keyword").text();
		// 按照class获取文档对象  show_author 的文本信息,并将该信息存入 author 中
		String author = doc.getElementsByClass("show_author").text();
		// 将以上信息填充到news对象中
		news.setTitle(title);
		news.setPublishTime(publishTime);
		news.setArticle(article);
		news.setKeyword(keyword);
		news.setAuthor(author);
		return news;
	}
}



从页面信息中按照标签选择自己需要的信息,然后根据标签之类的属性去获取对象这里列举其中的新闻信息对象的查找方法,其他的不一而足,随机应变

测试类:
package com.rzc.test;

import java.util.ArrayList;
import java.util.List;

import org.jsoup.nodes.Document;

import com.rzc.model.News;
import com.rzc.utils.Spider;

public class JsoupTest {
	
	public static void main(String[] args) {
		// 实例化工具类对象
		Spider spider = new Spider();
		// 根据url获取文档(这里的url是新浪首页)
		Document doc = spider.loadDocumentData("http://www.sina.com.cn");
		// 获取文档中a标签 中href属性中的内容
		List<String> list = spider.parseDoc(doc);
		// 实例化新闻列表
		List<News> newsList = new ArrayList<News>();
		// 循环遍历新闻列表中的每一个对象
		for(String url:list){
			// 获取整个文档
			Document document = spider.loadDocumentData(url);
			// 获取每个文档中的新闻对象
			News news = spider.parseDetaile(document);
			// 将文档中的新闻对象添加到新闻列表中
			newsList.add(news);
			// 测试输出新闻列表信息
			System.out.println(news);
		}
		
	}
}



输出结果

文章就介绍到这里,谢谢大家的观看,不足之处,还请指出!

java爬虫-基于jsoup的简单爬虫实现(从智联获取工作信息)

先来一个热热身: package com.demo.test; import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup...
  • m0_37499059
  • m0_37499059
  • 2018-01-04 11:21:43
  • 502

Java使用Jsoup抓取网页关键信息并入库

  • 2017年08月08日 16:57
  • 3KB
  • 下载

bootstrap+jsoup+jsp智联页面抓取系统

bootstrap+jsoup+jsp智联页面抓取系统 1.文件列表 2.项目步骤: 1.准备所需jar包和文件 所需jar包:jsoup-1.8.1.jar 复制bootstrap下的dis...
  • sinat_37109615
  • sinat_37109615
  • 2017-01-08 21:37:31
  • 382

Jsoup网页数据抓取案例

关于Jsoup的基础知识点这里就不说了,个人认为很多大牛写的很详细也比较全面,这里就简单举一个使用例子玩玩,社长也比较喜欢拿例子来理解一些知识点。 给几个有用的链接: 1、https://jsoup....
  • qq_24824415
  • qq_24824415
  • 2016-09-20 19:57:36
  • 244

HttpClient+jsoup实现网页数据抓取和处理

介绍一种简单的网页抓取和处理方案
  • java_zys
  • java_zys
  • 2016-06-18 10:48:38
  • 2191

Jsoup简介——使用Java抓取网页数据

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 jsou...
  • lee_tianya
  • lee_tianya
  • 2014-10-15 22:36:35
  • 9604

网页信息抓取进阶 Jsoup的不足之处

说道网页信息抓取,相信Jsoup基本是首选的工具,完全的类JQuery操作,让人感觉很舒服。但是,今天我们就要说一说Jsoup的不足。 1、首先我们新建一个页面   ? ...
  • hong0220
  • hong0220
  • 2014-11-14 00:07:05
  • 850

jsoup 分页抓取网页数据Java HTML Parser

ExampleFetch the Wikipedia homepage, parse it to a DOM, and select the headlines from the In the new...
  • u013128651
  • u013128651
  • 2017-06-29 13:54:54
  • 1111

使用Jsoup实现简单的页面信息爬取

使用Jsoup实现简单的页面信息爬取首先,简单说一下个人对爬虫的理解(比较简单,以后再完善):爬虫,简单点就是从网站上来爬取你所需要的信息。从这个功能考虑的话,也就简单的分为了一下几步(本篇主要就此展...
  • ychcqshan
  • ychcqshan
  • 2015-12-18 15:21:49
  • 1127

Jsoup 抓取网页信息(2) 需要Login的网页信息抓取

有时候抓取网页信息的时候,有些网页需要先登录才能查看到真正的内容。这样用我们上一篇文章的方法是无法直接抓取数据的。 Jsoup 抓取网页信息(1) 抓取 国际疾病码 例如抓取网页:http:/...
  • yuxiaohui78
  • yuxiaohui78
  • 2015-10-13 05:46:02
  • 3019
收藏助手
不良信息举报
您举报文章:一个简单的Jsoup抓取页面信息的例子
举报原因:
原因补充:

(最多只允许输入30个字)