java爬虫抓取网页数据( MaterialDesign重构了自己的新闻App,数据来源过程Get)

优采云 发布时间: 2021-10-08 17:34

  java爬虫抓取网页数据(

MaterialDesign重构了自己的新闻App,数据来源过程Get)

  Java实现爬虫向App提供数据(Jsoup网络爬虫)

  更新时间:2020年7月31日11:57:06 作者:学习编程知识

  本文文章主要介绍Java爬虫为App提供数据的实现,即Jsoup网络爬虫。文章中的示例代码很详细,有一定的参考价值。有兴趣的朋友可以参考一下。

  一、要求

  最近,我基于 Material Design 重构了我的新闻应用。数据源有问题。

  前人分析了知乎每日新闻和凤凰新闻等API。根据对应的URL,可以得到新闻的JSON数据。为了锻炼写代码的能力,打算自己爬新闻页面,获取数据来搭建API。

  二、效果图

  下图为原版网站

  

  爬虫获取数据并显示在APP移动端

  

  三、爬虫想法

  

  App的实现过程请参考这些文章文章。本文主要讲解如何抓取数据。

  Android下记录App操作生成Gif动态图的*敏*感*词*:///article/78236.htm

  学习 Android Material Design(RecyclerView 而不是 ListView):///article/78232.htm

  Android项目实战页面(RecyclerView):///article/78230.htm

  Jsoup 简介

  Jsoup 是一个 Java 开源 HTML 解析器,可以直接解析 URL 地址和 HTML 文本内容。

  Jsoup主要有以下功能:

  四、爬取过程

  获取获取网页 HTML 的请求

  新闻页面Html的DOM树如下:

  

  下面这段代码使用代码根据指定的url获取get请求返回的html源代码。

  

public static String doGet(String urlStr) throws CommonException {

URL url;

String html = "";

try {

url = new URL(urlStr);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("GET");

connection.setConnectTimeout(5000);

connection.setDoInput(true);

connection.setDoOutput(true);

if (connection.getResponseCode() == 200) {

InputStream in = connection.getInputStream();

html = StreamTool.inToStringByByte(in);

} else {

throw new CommonException("新闻服务器返回值不为200");

}

} catch (Exception e) {

e.printStackTrace();

throw new CommonException("get请求失败");

}

return html;

}

  InputStream in = connection.getInputStream();将输入流转换为字符串是一个常见的要求。我们把它抽象出来,写一个工具方法。

  

public class StreamTool {

public static String inToStringByByte(InputStream in) throws Exception {

ByteArrayOutputStream outStr = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len = 0;

StringBuilder content = new StringBuilder();

while ((len = in.read(buffer)) != -1) {

content.append(new String(buffer, 0, len, "UTF-8"));

}

outStr.close();

return content.toString();

}

}

  五、解析 HTML 获取标题

  使用谷歌浏览器的审查元素,找出新闻标题的html代码:

  

关于举办《经典音乐作品欣赏与人文审美》讲座的通知

  我们需要从上面的 HTML 中找到 id="article_title" 的部分,使用 getElementById(String id) 方法

  

String htmlStr = HttpTool.doGet(urlStr);

// 将获取的网页 HTML 源代码转化为 Document

Document doc = Jsoup.parse(htmlStr);

Element articleEle = doc.getElementById("article");

// 标题

Element titleEle = articleEle.getElementById("article_title");

String titleStr = titleEle.text();

  六、获取发布日期和信息来源

  还要找出对应的HTML代码

  

2015-05-28

??Դ:

浏览次数:

477

  思路和上面类似。使用 getElementById(String id) 方法找出 id="article_detail" 作为 Element,然后使用 getElementsByTag 获取 span 部分。因为有 3 个 ...,它返回 Elements 而不是 Element。

  

// article_detail包括了 2016-01-15 来源: 浏览次数:177

Element detailEle = articleEle.getElementById("article_detail");

Elements details = detailEle.getElementsByTag("span");

// 发布时间

String dateStr = details.get(0).text();

// 新闻来源

String sourceStr = details.get(1).text();

  七、分析浏览量

  如果打印出上面的details.get(2).text(),你只会得到

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线