前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java数据采集-5.获取CSDN个人博客列表(翻页-1)

Java数据采集-5.获取CSDN个人博客列表(翻页-1)

作者头像
geekfly
发布2022-05-06 19:37:35
2620
发布2022-05-06 19:37:35
举报
文章被收录于专栏:geekflygeekfly

本博客继上篇,针对第一种翻页加载数据的方式,编写实际代码演示。 因第三讲以详细介绍如何解析各个节点,之后教程不在详细截图说明分析过程,可根据我使用的css规则,自行对比分析。

废话不多说,开始撸代码。

  • 模拟Url请求,获取节点
代码语言:javascript
复制
String url = "http://blog.csdn.net/TMaskBoy/article/list/1";

Document document = Jsoup.connect(url) 
            .userAgent("ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36") 
            .get(); 

Elements items = document.select("#article_list > div");
System.out.println(items.size());

获取id=article_list下的div子标签 注意 “>”的用法,有id时首选id作为选择器

  • 解析总页数 上篇博客已经分析,此类型网页我们需要获取到总页数,然后循环所有的列表页。
代码语言:javascript
复制
//获取样例 69条 共7页
String page = document.select("#papelist > span").text();  

//使用正则表达式匹配总页数
Pattern pattern = Pattern.compile("(.*?)条 共(.*?)页");
Matcher matcher = pattern.matcher(page);  
int total_count = 0, total_page_number = 0;
if(matcher.find()){
    total_count = Integer.parseInt(matcher.group(1));
    total_page_number = Integer.parseInt(matcher.group(2));
}else{
    System.out.println("未获取到总页数!");
    System.exit(-1);
}
System.out.println(page);

上述代码使用正则表达式获取总页数和总记录数,也可以使用String的字符串查找和截取刷选。PS:我就是为了装逼才使用的正则表达式…

  • 遍历所有的列表页
代码语言:javascript
复制
String url = "http://blog.csdn.net/TMaskBoy/article/list/";
for(int current_page = 1; current_page <= total_page_number; current_page++){
    System.out.println("-------------------第" + current_page + "页开始-------------------------");
    getData(url + current_page); //获取每一页的数据
    System.out.println("-------------------第" + current_page + "页结束-------------------------");
        }
  • 解析列表页数据 本段代码即为上一段中的getData函数内容,获取每一个列表页,然后解析每一条数据,和第三篇博客相似,不在详细展示分析过程。对于零散的数据,此处使用正则表达式匹配,同样String截取也可以。
代码语言:javascript
复制
Document document = Jsoup.connect(url) 
                .userAgent("ozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36") 
                .get(); 

//获取列表所在位置
Elements items = document.select("#article_list > div");

//System.out.println(items.size());

//遍历每一个博客
for(Element item : items){
    //获取标题
    String title = item.select("h1 span a").text();

    //获取标题地址
    String href = "http://blog.csdn.net" + item.select("h1 span a").attr("href");

    //使用正则匹配其他数据  样例:2017-07-20 20:15 阅读(1) 评论(0)
    String other_info = item.select(".article_manage").text();

    Pattern pattern = Pattern.compile("(.*?) 阅读\\((.*?)\\) 评论\\((.*?)\\)");
    Matcher matcher = pattern.matcher(other_info);  
    String pubdate = "";
    Integer read_number = 0, comment_number = 0;
    if(matcher.find()){
        pubdate = matcher.group(1); //发布时间
        read_number = Integer.parseInt(matcher.group(2)); //阅读数 
        comment_number = Integer.parseInt(matcher.group(3)); //评论数
    }
}

最后po上效果图:

这里写图片描述
这里写图片描述

仓库:https://github.com/geekfly2016/Spider 代码目录:Spider/src/xyz/geekfly/get_list/CSDN_BLOG.java

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-07-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档