爬虫 + jsoup 轻松爬博客
最近的开发任务主要是爬虫爬新闻信息, 这里主要用到技术就是 jsoup,jsoup 是一款 Java 的 html 解析器, 可直接解析某个 URL 地址, HTML 文本内容. 它提供了一套非常省力的 API, 可通过
DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据. 这篇文章就讲通过 jsoup 爬虫的实际案例, 下一篇再讲 jsoup 的具体文档.
主要爬虫对象就以我之前写的一篇博客:[java 提高] ---java 反射机制
主要爬区的信息有
(1) 该文章的标题
(2) 该文章的二类标题
(3) 发表时间
(4) 阅读数量
一, 案例演示
1, 代码部分
- package com.jincou.pachong;
- import java.io.IOException;
- import org.jsoup.Jsoup;
- import org.jsoup.nodes.Document;
- import org.jsoup.nodes.Element;
- import org.jsoup.select.Elements;
- /*
- * 这个案例你只需要看结果, 具体的 jsoup 介绍下一篇博客会详细介绍
- */
- public class Pachong {
- public static void main(String args[]){
- // 这个就是博客中的 java 反射的 url
- final String url= "https://www.cnblogs.com/qdhxhz/p/9230805.html";
- try {
- // 先获得的是整个页面的 html 标签页面
- Document doc = Jsoup.connect(url).get();
- // 获取正文标题, 因为整片文章只有标题是用 h1 标签
- Elements btEl = doc.select("H1");
- String bt=btEl.text();
- System.out.println("======== 正文标题 ======:");
- System.out.println(bt);
- // 获取二级标题
- Elements ejbtEls = doc.select("H2");
- // 因为整片文章有多个二级标题所以进行拼接
- StringBuilder ejbts=new StringBuilder();
- for(Element el :ejbtEls) {
- ejbts.append(el.text());
- ejbts.append("\n");
- }
- String ejbt=ejbts.toString();
- System.out.println("======= 二级标题 =========:");
- System.out.println(ejbt);
- // 获取时间
- Elements timeEl = doc.select("#post-date");
- String time=timeEl.text();
- System.out.println("======== 发布时间 =========:");
- System.out.println("发布时间:" + time);
- // 获取阅读数量
- Elements readEl = doc.select("#post_view_count");
- String read=readEl.text();
- System.out.println("======== 阅读数量 =========:");
- System.out.println("阅读数量:" + read);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
2, 运行结果
注意: 我们发现该篇文章的信息都已经爬到了, 但是为什么阅读数量是...
二, 案例讲解
首先我们要知道: jsoup 是一款 Java 的 HTML 解析器, 可直接解析某个 URL 地址, HTML 文本内容. 它提供了一套非常省力的 API, 可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操
作数据. 上面这两点很关键, 具体细说.
1, 如何爬到正文标签
我们看到正文标题的 html 标签是 h1 标签, 所以我们只要获得H1 标签元素, 就可以爬到文本. 那么同样的二级标签也是通过 H2 标签爬到就可以.
2, 如何获得发布时间
因为时间的标签 id 是 post-date, 所以可以通过 id 获得该标签元素.
3, 为什么阅读数量是...
我们看到页面阅读是有的, 但爬虫爬到确实...?
这是为什么呢, 这点很重要. 那是因为该静态页面初始加载的时候是没有阅读数量的, 阅读数量是后来接口重新调取的. 什么意思呢? 其实很好理解所以你写一篇文章的时候像标题, 内容, 时间
等等是不太会变动的, 但是你的阅读数量每访问一次都会改变, 所以不可能把阅读数量和文章放在一张表里, 而是分开放然后 id 关联就可以. 这样就避免每次 update 文章表. 所以静态页面初始是没有
阅读数量的.
那如何验证是不是这样. 请看.
我们发现初始的 html 页面的阅读量和评论都是没有的, 而是默认..., 所以上面爬到的就是...
那如何能爬到真实的阅读量呢, 这个就需要知道它真实的接口是什么, 然后通过其它工具来爬, 我们看下获取阅读量的真实接口.
既然知道阅读量的真实接口, 那么爬到它也就简单了.
注意: 通过这里我们要明白, 只有 html 元素有的情况下, 才能通过 jsoup 来爬虫, 如果是这接口获得的数据, 那么通过 jsoup 是无法获取到的.
有关 jsoup 也是自己的理解, 如有不正确请留言指点.
想太多, 做太少, 中间的落差就是烦恼. 想没有烦恼, 要么别想, 要么多做. 中校 [9]
来源: https://www.cnblogs.com/qdhxhz/p/9338834.html