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进行解析。

依赖:


<dependency>
    <groupId>org.jsoupgroupId>
    <artifactId>jsoupartifactId>
    <version>1.11.3version>
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); 

你可能感兴趣的:(Java爬虫实现——Jsoup解析器)