No.111362 作者:cortex3564 邮件:3306607541@qq.com ID:133141 登陆:3次 文章数:14篇 最后登陆IP:119.139.116.150 最后登陆:2016/1/17 17:33:33 注册:2016/1/11 16:27:03 财富:170 发帖时间:2016/1/17 17:30:11 发贴者IP:119.139.116.150 标题:cortex3564:【深圳信盈达】Jsoup 网络爬虫 摘要:No.111362【深圳信盈达】Jsoup 网络爬虫 Java实现爬虫给App提供数据(Jsoup 网络爬虫) 开始基于Get请求获取URL对于的网页Html利用Jsoup把Html解析为Document利用Dom的getElementsById等方法获取标题、发布时间、内容等根据标题、发布时间、内容构建javabean给APP使用结束 关于 App 的实现过程可以参看这几篇文章,本文主要讲解一下如何爬虫数据。 • Android 下如何录制App操作生成Gif动态图 • Android Material Design学习之RecyclerView代替 ListView • 仿网易新闻的页面(ViewPager作为RecyclerView的Header) Jsoup 简介 Jsoup 是一个 Java 的开源HTML解析器,可直接解析某个URL地址、HTML文本内容。 Jsoup主要有以下功能: - 从一个URL,文件或字符串中解析HTML; - 使用DOM或CSS选择器来查找、取出数据; - 对HTML元素、属性、文本进行操作; - 清除不受信任的HTML (来防止XSS攻击) 到官网下载相应的Jsoup依赖包 Get 请求获取网页 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 获取标题 利用 google 浏览器的审查元素,找出新闻标题对于的html 代码: <div id="article_title"> <h1> <a href=" ;> 关于举办《经典音乐作品欣赏与人文审美》讲座的通知 </a> </h1> </div> 我们需要从上面的 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.getElem ......
>>返回讨论的主题
|