【java爬虫】---爬虫+jsoup轻松爬博客
爬虫+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】
【java爬虫】---爬虫+jsoup轻松爬博客的更多相关文章
- 利用爬虫将Yuan先生的博客文章爬取下来
由于一次巧遇,我阅读了Yuan先生的一篇博客文章,感觉从Yuan先生得博客学到很多东西,很喜欢他得文章.于是我就关注了他,并且想阅读更多出自他手笔得博客文章,无奈,可能Yuan先生不想公开自己得博客吧 ...
- [Python爬虫笔记][随意找个博客入门(一)]
[Python爬虫笔记][随意找个博客入门(一)] 标签(空格分隔): Python 爬虫 2016年暑假 来源博客:挣脱不足与蒙昧 1.简单的爬取特定url的html代码 import urllib ...
- java JDK8 学习笔记——助教学习博客汇总
java JDK8 学习笔记——助教学习博客汇总 1-6章 (by肖昱) Java学习笔记第一章——Java平台概论 Java学习笔记第二章——从JDK到IDEJava学习笔记第三章——基础语法Jav ...
- 20155317 《Java程序设计》0510上课考试博客
20155317 <Java程序设计>0510上课考试博客 二.Arrays和String单元测试 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常, ...
- 通过爬虫代理IP快速增加博客阅读量——亲测CSDN有效!
写在前面 题目所说的并不是目的,主要是为了更详细的了解网站的反爬机制,如果真的想要提高博客的阅读量,优质的内容必不可少. 了解网站的反爬机制 一般网站从以下几个方面反爬虫: 1. 通过Headers反 ...
- Python爬虫,看看我最近博客都写了啥,带你制作高逼格的数据聚合云图
转载请标明出处: http://blog.csdn.net/forezp/article/details/70198541 本文出自方志朋的博客 今天一时兴起,想用python爬爬自己的博客,通过数据 ...
- Python+爬虫+xlwings发现CSDN个人博客热门文章
☞ ░ 前往老猿Python博文目录 ░ 一.引言 最近几天老猿博客的访问量出现了比较大的增长,从常规的1000-3000之间波动的范围一下子翻了将近一倍,粉丝增长从日均10-40人也增长了差不多一倍 ...
- 【Python3爬虫】为什么你的博客没人看呢?
我相信对于很多爱好和习惯写博客的人来说,如果自己的博客有很多人阅读和评论的话,自己会非常开心,但是你发现自己用心写的博客却没什么人看,多多少少会觉得有些伤心吧?我们今天就来看一下为什么你的博客没人看呢 ...
- webmagic爬虫抓取工作室成员博客
一.导入依赖 <!--webmagic依赖--> <dependency> <groupId>us.codecraft</groupId> <ar ...
随机推荐
- SharePoint修改左上角文字的命令行
$webapp = Get-SPWebApplication “http://test-spweb1” --需要修改的站点$webapp.SuiteNavBrandingText = “XXXXXX” ...
- 使用Python开发的POC多线程批量执行小框架
因为代码量非常少,所以就叫“小框架”吧. 接口非常简陋,但是好处是适配POC脚本的时候很灵活,兼容性高,不需要任何研究成本. 简单来说,你按照自己的想法和习惯开发一个POC验证程序,它只要做到三点,即 ...
- vue笔记-列表渲染
用v-for把一个数组对应为一组元素 使用方法:v-for="(item,index) in items"//也可以使用of替代in { items:源数组 item:数组元素迭代 ...
- leetcode刷题正则表达式
题目链接:https://leetcode-cn.com/problems/regular-expression-matching/ 这道题用到了动态规划: 关于动态规划请参考这篇博文:https:/ ...
- Python第三周第一次作业中关于工程目录各种导入的模拟学习
目录 Python工程目录 导入自定义模块, 包 记录的缘由 模块搜索路径 模块: 导入模块 导入函数 导入类 多个类 @(Python第三周第一次作业中工程目录,模拟学习) Python工程目录 导 ...
- WPF中的ObservableCollection数据绑定
使用时ObservableCollection必须使用get set属性声明,才能成功的绑定到控件.
- 结队第一次 plus
作业描述 作业所属课程:软件工程1916|W(福州大学) 作业要求:结对第一次-原型设计 结对学号:221600328 221600106 作业目标:尝试结对合作,使用NABCD模型,会分析用户需求, ...
- linux 存在多个版本的情况下,切换python版本
linux 存在多个版本的情况下 python 命令默认寻找 /usr/bin下的命令 所以先find / -name python* 找一下所有的Python版本 然后 sudo ln /usr/b ...
- arp断网攻击
arp断网攻击可以是同局域网内主机无法上网!(可恶搞室友哦,嘻嘻!) 实现原理 arp的中文释义是地址解析协议,全英文 address resolution protocol,是一个将局域网IP地址映 ...
- JOISC2019 游记
JOISC2019 游记 Day 1: 試験 (Examination) 题目大意: 有\(n(n\le10^5)\)个人,每个人有两种属性\(s_i,t_i\).\(q(q\le10^5)\)次询问 ...