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

优采云 发布时间: 2020-08-09 09:01

  本次抓取地址:

  项目源码:

  代码目录: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.抓取开源中国新闻(新版)

  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函数为获取某一页的数据,接收页数作为参数,返回当前页的数据条数。

  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.结果展示

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线