Java爬虫实现——Jsoup解析器

Jsoup简介

jsoup是一款Java的HTML解析器,主要用来对HTML解析。

中文文档https://www.open-open.com/jsoup

能用Jsoup实现什么?

  1. 从URL,文件或字符串中刮取并解析HTML
  2. 查找和提取数据,使用DOM遍历或CSS选择器
  3. 操纵HTML元素,属性和文本
  4. 根据安全的白名单清理用户提交的内容,以防止XSS攻击
  5. 输出整洁的HTML

在爬虫的时候,当我们用HttpClient之类的框架,获取到网页源码之后,需要从网页源码中取出我们想要的内容,就可以使用jsoup这类HTML解析器了。可以非常轻松的实现。
虽然jsoup也支持从某个地址直接去爬取网页源码,但是只支持HTTP,HTTPS协议,支持不够丰富。所以,主要还是用来对HTML进行解析。

依赖:

<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.11.3</version>
</dependency>

Jsoup重要类

1、org.jsoup.Jsoup类

Jsoup类是任何Jsoup程序的入口点,并将提供从各种来源加载和解析HTML文档的方法。

方法描述
static Connection connect(String url)创建并返回URL的连接。
static Document parse(File in, String charsetName)将指定的字符集文件解析成文档。
static Document parse(String html)将给定的html代码解析成文档。
tatic String clean(String bodyHtml, Whitelist whitelist)从输入HTML返回安全的HTML,通过解析输入
HTML 并通过允许的标签和属性的白名单进行过滤。
2、org.jsoup.nodes.Document类
3、org.jsoup.nodes.Element类

重要方法:

方法描述
child(int index)通过索引 定位到子元素.
children()获取这个元素的所有子孩子
className()获取这个元素的class属性的名字
classNames()获取所有元素的class名字 返回值: Set< String>
classNames(Set< String> classNames )通过提供的class名字来设置元素的class属性
data()获取这个元素的结合数据
empty()移除这个元素的所有孩子数据节点.
firstElementSibling()获取当前元素 同一级别的第一个兄弟元素.
getAllElements()拿到当前元素下的所有元素 ( 包括 自己 , 孩子 , 孩子的孩子)
getElementsByAttribute(String key)通过属性名称 查找当前html下的所有元素
getElementsByClass(String className)当前元素是否有此class 或者在这个元素下面是否有这个class
html()检索文件内的Html
id()返回当前元素的id值
isBlock()测试这个元素是不是层级元素
lastElementSibling()获取这个元素的同一级别元素的最后一个
parent()获取这个节点的父节点
parents()获取到父节点 ,一直到节点的根节点
select()选择器方法 , 万能的
siblingElements()获取所有的兄弟元素(不包含自己)
tag()获取这个标签对象
tagName()获取这个标签的名字
text()获取这个元素和所有孩子的文本内容
textNodes()获取这个元素的孩子文本标签集合
wrap()包装这个元素的html
下面是一些实例:
  1. 从URL加载文档,使用Jsoup.connect()方法从URL加载HTML。
	Document document = Jsoup.connect("https://blog.csdn.net/s2152637/article/details/98983370").get();
	System.out.println(document.title());
  1. 要获取网页中的所有链接
	Document document = Jsoup.connect("https://blog.csdn.net/s2152637/article/details/98983370");
	Elements links = document.select("a[href]");  
    for (Element link : links) {
         System.out.println("link : " + link.attr("href"));  
         System.out.println("text : " + link.text());  
    }
  1. 要获取网页中显示的所有图像
	Document document = Jsoup.connect("https://blog.csdn.net/s2152637/article/details/98983370");
    Elements images = document.select("img[src~=(?i)\\.(png|jpe?g|gif)]");
    for (Element image : images) {
        System.out.println("src : " + image.attr("src"));
        System.out.println("height : " + image.attr("height"));
        System.out.println("width : " + image.attr("width"));
        System.out.println("alt : " + image.attr("alt"));
    }
  1. 获取URL的元信息。元信息包括Google等搜索引擎用来确定网页内容的索引为目的。 它们以HTML页面的HEAD部分中的一些标签的形式存在。
Document document = Jsoup.connect("https://blog.csdn.net/s2152637/article/details/98983370");

    String description = document.select("meta[name=description]").get(0).attr("content");  
    System.out.println("Meta description : " + description);  

    String keywords = document.select("meta[name=keywords]").first().attr("content");  
    System.out.println("Meta keyword : " + keywords); 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值