抓取网页新闻(JavaHTML解析器如何使用jsoup抓取一些简单的页面信息准备)
优采云 发布时间: 2021-10-11 17:44抓取网页新闻(JavaHTML解析器如何使用jsoup抓取一些简单的页面信息准备)
介绍:
jsoup 是一个 Java HTML 解析器,可以直接解析 URL 地址和 HTML 文本内容。它提供了一个非常省力的API,可以通过DOM、CSS和类似jQuery的操作方法来检索和操作数据。
在这篇文章中,我将教你如何使用jsoup抓取一些简单的页面信息
准备:
jsoup的jar包:
开发工具:eclipse
想法:
我们首先使用jsoup将网页上的html解析为字符串,然后将字符串转换为Document,然后选择一些我们想要遍历的信息。
过程:
1.创建web项目,命名项目,导入jar包
lombok是省略了get和set方法,请参考
2.创建目录结构
模型中的新闻是一个封装好的新闻实体对象
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 parseDoc(Document doc) {
// 实例化list
List list = new ArrayList();
// 根据指定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 list = spider.parseDoc(doc);
// 实例化新闻列表
List newsList = new ArrayList();
// 循环遍历新闻列表中的每一个对象
for(String url:list){
// 获取整个文档
Document document = spider.loadDocumentData(url);
// 获取每个文档中的新闻对象
News news = spider.parseDetaile(document);
// 将文档中的新闻对象添加到新闻列表中
newsList.add(news);
// 测试输出新闻列表信息
System.out.println(news);
}
}
}
输出结果
文章 到此为止吧。谢谢观看。不足之处请指出!