前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java数据采集-6.获取开源中国新闻列表(翻页-2)

Java数据采集-6.获取开源中国新闻列表(翻页-2)

作者头像
geekfly
发布2022-05-06 19:38:19
5570
发布2022-05-06 19:38:19
举报
文章被收录于专栏:geekfly

本次抓取地址:https://www.oschina.net/news 项目源码:https://github.com/geekfly2016/Spider 代码目录:Spider/src/xyz/geekfly/get_list/OSCHINA_NEWS.java

1.打开目标网址,打开开发者工具,清空控制台

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

2.拖动滚动条到底部

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

在一堆请求中,我们可以看到有一个xhr的请求,地址如get_more_news_list,那它肯定就是翻页加载数据的Url请求了。 (可点击xhr进行过滤Url请求,xhr即为Ajax类型的请求。)


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

点击该链接,在Header中,我们可以看到请求地址,请求类型,参数等,参数中的p即为获取第p页的数据,有些网站还会包括每页的数据条数,根据实际情况添加即可。


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

点击response可以查看返回的数据,细心的同学已经看到返回的数据和Java数据采集-3.抓取开源中国新闻(新版)博客中介绍的一致,此处不再做过多介绍。

3.解析数据

forEachData为解析每一页数据的,获取具体的每一条的相关信息。 以下代码详细介绍参考:Java数据采集-3.抓取开源中国新闻(新版)

代码语言:javascript
复制
public static void forEachData(Elements items){
        String host = "https://www.oschina.net";
        for(Element item: items){
            //过滤广告
            if(!item.attr("data-tracepid").isEmpty()){
                continue;
            }
            // 标题
            String title = item.select("a").first().text();

            //标题地址
            String title_href = item.select("a").first().attr("href");
            if(!title_href.startsWith("https://")){
                title_href = host + title_href;
            }
            //描述
            String desc = item.select("div[class=sc sc-text text-gradient wrap summary]").text();

            //作者头像
            String author_image = item.select("img[class=avatar]").attr("src");
            //String author_image = item.select("img").first().attr("src");

//          System.out.println(item);
            Element mr = item.select(".from .mr").get(0);
            //作者
            String author = mr.select("a").text();
            // 从span[class=mr]中移除a标签,输出的即为发布时间
            mr.select("a").remove();
            String published = mr.text();

            String number = item.select(".from .mr").last().text();
            System.out.println("\t"+ title);

        }

4.构造循环

在主函数中,使用循环获取每一页的数据,由于此类型的网站并不知道总页数,所以一般需要根据看是否还能获取到数据来判断结束。 getPageData函数为获取某一页的数据,接收页数作为参数,返回当前页的数据条数。

代码语言:javascript
复制
public static void main(String[] args) throws IOException {

        for(int page_number=1;;page_number++){
            int data_rows = getPageData(page_number);
            System.out.println("当前执行:" + page_number + "页,数据数:" + data_rows);
            //返回数据为空时,结束循环
            if(data_rows == 0){
                break;
            }
        }
    }

    public static int getPageData(int page_number) throws IOException{
        String page_url = "https://www.oschina.net/action/ajax/get_more_news_list?newsType=&p=" + page_number;

        Document document = Jsoup.connect(page_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") 
                .post(); 

        //获取样例 69条 共7页
        Elements items = document.select("div[class=item box]");  
        forEachData(items);
        return items.size();
    }

5.结果展示

这里写图片描述
这里写图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.打开目标网址,打开开发者工具,清空控制台
  • 2.拖动滚动条到底部
  • 3.解析数据
  • 4.构造循环
  • 5.结果展示
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档