导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[cortex3564]【深圳信盈达】Jsoup 网络爬虫



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 ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:16毫秒 最大:8742毫秒 查询8次