java爬虫jsoup_【java爬虫】---爬虫+jsoup轻松爬博客

爬虫+jsoup轻松爬博客

最近的开发任务主要是爬虫爬新闻信息,这里主要用到技术就是jsoup,jsoup 是一款 Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过

DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。这篇文章就讲通过jsoup爬虫的实际案例,下一篇再讲jsoup的具体文档。

主要爬区的信息有

(1)该文章的标题

(2)该文章的二类标题

(3)发表时间

(4)阅读数量

一、案例演示

1、代码部分

packagecom.jincou.pachong;importjava.io.IOException;importorg.jsoup.Jsoup;importorg.jsoup.nodes.Document;importorg.jsoup.nodes.Element;importorg.jsoup.select.Elements;/** 这个案例你只需要看结果,具体的jsoup介绍下一篇博客会详细介绍*/

public classPachong {public static voidmain(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=newStringBuilder();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、运行结果

74fbdb2507b8408bb435a59003d49dd6.png

注意:我们发现该篇文章的信息都已经爬到了,但是为什么阅读数量是...

二、案例讲解

首先我们要知道:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操

作数据。上面这两点很关键,具体细说。

1、如何爬到正文标签

我们看到正文标题的html标签是h1标签,所以我们只要获得H1标签元素,就可以爬到文本。那么同样的二级标签也是通过H2标签爬到就可以。

be9e0b4c46d836e76e0e54dd2d6af106.png

2、如何获得发布时间

因为时间的标签id是post-date,所以可以通过id获得该标签元素。

86ec987da1ad5e2b8ef4f217ced1d059.png

3、为什么阅读数量是...

我们看到页面阅读是有的,但爬虫爬到确实...?

313eb79f134d0ec3e7e685d4265362e2.png

这是为什么呢,这点很重要。那是因为该静态页面初始加载的时候是没有阅读数量的,阅读数量是后来接口重新调取的。什么意思呢?其实很好理解所以你写一篇文章的时候像标题,内容,时间

等等是不太会变动的,但是你的阅读数量每访问一次都会改变,所以不可能把阅读数量和文章放在一张表里,而是分开放然后id关联就可以。这样就避免每次update文章表。所以静态页面初始是没有

阅读数量的。

那如何验证是不是这样。请看。

6cefcc6db8d5517e7623d34ad2a944f7.png

我们发现初始的html页面的阅读量和评论都是没有的,而是默认...,所以上面爬到的就是...

那如何能爬到真实的阅读量呢,这个就需要知道它真实的接口是什么,然后通过其它工具来爬,我们看下获取阅读量的真实接口。

db055d6c58def5507269015d761eacf1.png

既然知道阅读量的真实接口,那么爬到它也就简单了。

注意:通过这里我们要明白,只有html元素有的情况下,才能通过jsoup来爬虫,如果是这接口获得的数据,那么通过jsoup是无法获取到的。

有关jsoup也是自己的理解,如有不正确请留言指点。

想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。中校【9】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值