抓取网页新闻(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);

}

}

}

  输出结果

  

  文章 到此为止吧。谢谢观看。不足之处请指出!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线