抓取网页新闻(关于Jsoup分析与思路虎扑NBA新闻网页的新闻列表)

优采云 发布时间: 2022-03-07 14:00

  抓取网页新闻(关于Jsoup分析与思路虎扑NBA新闻网页的新闻列表)

  前言:作为一个篮球迷,每天都要刷NBA新闻。用了这么多新闻应用后,我想知道我是否可以制作一个简单的新闻应用。于是我用Jsoup抓取了虎扑NBA新闻的数据,完成了一个简单的新闻APP。虽然没有什么技术含量,但还是把过程写下来,满足菜鸟的小成就感。

  Jsoup分析与思路虎扑NBA新闻页面上的新闻列表如图:

  

  我们要做的就是获取图片中每条新闻的新闻标题、新闻摘要、新闻时间和来源、新闻链接地址,然后将以上四个数据封装成一个实体类News,然后布局到列表视图。. 点击ListView的每个子项,用WebView显示子项显示的新闻的链接地址,大功告成。效果如图:

  

  具体实施过程

  1.在AndroidStudio新建项目JsoupTest,然后将Jsoup jar包【下载地址】复制到项目的libs中,然后右键Add As Library...

  2.修改activity_main.xml的布局,简单的添加一个ListView,设置Listview每两个子项的间隔距离和颜色

  3.创建一个实体类News来封装我们将从网页中获取的新闻的标题、摘要、时间和来源、链接地址四个数据。很简单,用四个变量来表示以上四个数据,并建立对应的构造方法和四个变量的get和set方法。

  public class News {

private String newsTitle; //新闻标题

private String newsUrl; //新闻链接地址

private String desc; //新闻概要

private String newsTime; //新闻时间与来源

public News(String newsTitle, String newsUrl, String desc, String newsTime) {

this.newsTitle = newsTitle;

this.newsUrl = newsUrl;

this.desc = desc;

this.newsTime = newsTime;

}

public String getDesc() {

return desc;

}

public void setDesc(String desc) {

this.desc = desc;

}

public String getNewsTime() {

return newsTime;

}

public void setNewsTime(String newsTime) {

this.newsTime = newsTime;

}

public String getNewsTitle() {

return newsTitle;

}

public void setNewsTitle(String newsTitle) {

this.newsTitle = newsTitle;

}

public String getNewsUrl() {

return newsUrl;

}

public void setNewsUrl(String newsUrl) {

this.newsUrl = newsUrl;

}

}

  4.最重要的一步:使用Jsoup获取虎扑NBA新闻网页的数据,封装到News实体类中。只是简要概述了如何实施

  分析上图中两条新闻的源码,找到我们打算获取的新闻的标题、摘要、时间和来源、链接地址四个数据。我们可以发现,在每条新闻的[div][/div]标签下,都有两条数据,一条新闻的链接地址,一条新闻的标题。而我们要做的就是使用Jsoup来解析这两个数据:

  

  首先用 Jsoup.connect("URL to grab data").get() 获取一个 Document 对象

  Document doc = Jsoup.connect("https://voice.hupu.com/nba/").get();

  使用方法 doc.select("div.list-hd") 返回一个 Elements 对象,该对象封装了每个新闻 [div][/div] 标签的内容。数据格式为:[{news1},{news 2}, {news 3}, {news 4}...]

  对于每个 Element 对象,使用 for 循环遍历 titleLinks:

  使用e.select("a").text()获取[a][/a]之间的内容,即新闻标题;

  使用e.select("a").attr("href") 获取每个标签中href的值,即新闻的链接地址

  Elements titleLinks = doc.select("div.list-hd");

for(Element e:titleLinks){

String title = e.select("a").text();

String uri = e.select("a").attr("href");

}

   Elements descLinks = doc.select("div.list-content");

for(Element e:titleLinks){

String desc = e.select("span").text();

}

  - 新闻时间及来源源代码

![这里写图片描述](http://img.blog.csdn.net/20170122221602676?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvU0NQcm9ncmFtbWVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

用如下代码获得新闻时间与来源

```

Elements timeLinks = doc.select("div.otherInfo");

  for(元素 e:timeLinks){

  String time = e.select("span.other-left").select("a").text();

  }

  ````

<p> private void getNews(){

new Thread(new Runnable() {

@Override

public void run() {

try{

//获取虎扑新闻20页的数据,网址格式为:https://voice.hupu.com/nba/第几页

for(int i = 1;i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线