精华内容
下载资源
问答
  • html解析器

    2011-12-24 17:09:54
    一个简单的html解析器, 可以解析出html里的所有文本.
  • HTML 解析器

    2017-12-19 15:40:12
    1、Jsoup ...jsoup 是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 2、HTML Parser ...

    1、Jsoup

    https://jsoup.org/

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

    2、HTML Parser

    http://htmlparser.sourceforge.net/

    HTML Parser是一个用于解析Html的Java的库,可采用线性或嵌套两种方式。主要用于网页的转换或提取,他有一些特性:过滤器,visitors,通常的标签和易用的JavaBeans。它是一个快速,健壮,并严格测试过的组件。

    3、Beautiful Soup

    https://www.crummy.com/software/BeautifulSoup/bs4/doc/

    Beautiful Soup 是一个可以从 HTML 或 XML 文件中提取数据的 Python 库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.

    参考文章:
    http://www.jianshu.com/p/cfd6180cf97c
    http://blog.csdn.net/sky_zhe/article/details/7482705
    http://www.jianshu.com/p/2b783f7914c6

    欢迎关注微信公众号:DroidMind
    精品内容独家发布平台
    20170619210700424

    呈现与博客不一样的技术干货

    展开全文
  • HTML解析器

    2013-03-29 20:41:39
    这是一款比较强大的HTML解析工具,亲赶快下载适用下吧
  • jsoup Java HTML解析器

    2017-12-17 11:23:29
    jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器 jsoup Java HTML解析器
  • Python HTML解解析析器器BeautifulSoup用用法法实实例例详详解解 爬爬虫虫解解析析器器 这篇文章主要介绍了Python HTML解析器BeautifulSoup用法,结合实例形式详细分析了第三方库BeautifulSoup实现 的爬虫解析器功能...
  • 主要介绍了Python HTML解析器BeautifulSoup用法,结合实例形式详细分析了第三方库BeautifulSoup实现的爬虫解析器功能具体操作技巧,需要的朋友可以参考下
  • 解析-HTML 解析器

    2019-02-20 11:42:55
    因为 HTML 语言在语法层面并有那么严格的语法规则,导致常规的解析器并不能解析HTML文档,对应的解决方案让浏览器厂商自定义 HTML 解析器。那么,让我们一起梳理一下 HTML 解析器到底是什么吧~ 输入(语法) 因为 ...

    4-解析-HTML 解析器

    因为 HTML 语言在语法层面并有那么严格的语法规则,导致常规的解析器并不能解析HTML文档,对应的解决方案让浏览器厂商自定义 HTML 解析器。那么,让我们一起梳理一下 HTML 解析器到底是什么吧~

    输入(语法)

    因为 HTML 语法是由 W3C 组织创建的规范中进行定义的,而且语法格式是由 DTD (Document Type Definition)定义的,该格式中定义了语言中允许的元素、属性和层次结构,适用一切的 SGML (Standard Gerneralized Markup Languge)族的语言。为了在发展的进程中向后兼容老版本的内容,DTD 存在两种模式,严格模式完全遵守 HTML 规范,其他模式支持老的浏览器使用的编辑。

    解析算法

    因为 HTML 文档语法特性(包容性),以及在解析过程中存在脚本会改变 HTML 文档(如: document.write),导致无法使用自上而下或是自下而上的解析器进行解析。

    解析过程前半段是词法分析,也就是标记化(tokenization),整体算法的核心就是状态机的改变(就是解析过程中有一个标识当前状态应是解析到哪一个阶段了)。

    同时构建 DOM 树,也就是树构建(tree construction)过程,该过程就是我们在「解析-理论剖析」讲述的一样,将对应的标记去击中语法,然后添加到 DOM 树上。此过程中也有一个状态机去维护对应的阶段。

    最后 DOM 树是 HTML 文档的映射关系和存留 HTML 元素对外的接口(如: 对JS),每一个节点是由 DOM 元素和节点属性组成。看一个例子:

    <html>
      <body>
        <p>
          Hello World
        </p>
        <div> <img src="example.png"/></div>
      </body>
    </html>
    复制代码

    解析完,进入交互阶段开始解析处于 'deferred mode' (that should be executed after the document is parsed)的脚本,执行完这些脚本后,文档状态为 complete,触发 load 事件。

    因为解析器是浏览器厂商的自定义,而 HTML语法特性比较特殊,所以解析器要有相关的容错机制,而这机制并不是 HTML 规范中强制规定,而是浏览器发展过程中的产品(友商之间互抄好的地方呗),但是后期的 HTML 5 规范中有部分容错机制的要求(webkit 的 HTML 解析器就有这样的注释)。

    上述只是描述到 HTML 文档的解析,那脚本和样式的解析顺序呢?

    因为 web 的模型式同步的原因,如果遇见内部 <script> 标签,就会中断 HTML 解析,开始执行脚本,直到脚本执行完毕,而遇到外部的脚本,解析同样中断直到请求脚本回来。这些解析模式在 HTML 4 5规范中有所描述。

    毕竟突然中断 HTML 解析还是会影响页面展示的时间,那样我们需要规避不必要的因脚本而中断解析,那就是给 <script>添加 defer 属性,这是 HTML 5中给脚本标记为异步的标识,这样脚本通过不同的线程解析和执行。

    当有脚本在执行的过程中,会触发「预解析」,此时是其他线程继续解析文档,找到需要请求加载的资源,加载这部分资源(并行加载,提高整体速度)。预解析只解析外部文件(外部脚本、样式或图片),此过程不修改 DOM 树。

    样式方面,因为解析样式并不会影响 DOM 树,所以不需要中断文档解析。但同时存在一个问题,当脚本获取样式信息时,但此时样式并没有加载就会报错。对应的解决手段就是阻塞脚本,但不用浏览器阻塞的阶段不同,firefox是当样式加载或解析的时候,会阻塞所有的脚本;而 webkit 是当脚本去访问那些确定会被为加载样式影响到的属性时,阻塞脚本。

    以上是刚刚完成了 DOM 树的构建,那我们马上进入后续阶段咯~

    下一篇文章

    渲染树-理论剖析

    转载于:https://juejin.im/post/5c6d3d2c518825622d74b369

    展开全文
  • Html解析器 基于原生Html解析进行功能扩充和定制的Html解析器 增加的功能 优化引用的显示效果 优化无序列表的显示效果 增加argb、rgb和16进制颜色的支持 增加对code标签和代码块的支持 增加了对text-indent属性的...
  • 4-解析-HTML 解析器因为 HTML 语言在语法层面并有那么严格的语法规则,导致常规的解析器并不能解析HTML文档,对应的解决方案让浏览器厂商自定义 HTML 解析器。那么,让我们一起梳理一下 HTML 解析器到底是什么吧~...

    4-解析-HTML 解析器

    因为 HTML 语言在语法层面并有那么严格的语法规则,导致常规的解析器并不能解析HTML文档,对应的解决方案让浏览器厂商自定义 HTML 解析器。那么,让我们一起梳理一下 HTML 解析器到底是什么吧~

    输入(语法)

    因为 HTML 语法是由 W3C 组织创建的规范中进行定义的,而且语法格式是由 DTD (Document Type Definition)定义的,该格式中定义了语言中允许的元素、属性和层次结构,适用一切的 SGML (Standard Gerneralized Markup Languge)族的语言。为了在发展的进程中向后兼容老版本的内容,DTD 存在两种模式,严格模式完全遵守 HTML 规范,其他模式支持老的浏览器使用的编辑。

    解析算法

    因为 HTML 文档语法特性(包容性),以及在解析过程中存在脚本会改变 HTML 文档(如: document.write),导致无法使用自上而下或是自下而上的解析器进行解析。

    04fe680c74c8de2847f7fe9a7c4c26ad.png

    解析过程前半段是词法分析,也就是标记化(tokenization),整体算法的核心就是状态机的改变(就是解析过程中有一个标识当前状态应是解析到哪一个阶段了)。

    677e482230cdfbf1ff18d45edaf98703.png

    同时构建 DOM 树,也就是树构建(tree construction)过程,该过程就是我们在「解析-理论剖析」讲述的一样,将对应的标记去击中语法,然后添加到 DOM 树上。此过程中也有一个状态机去维护对应的阶段。

    1ac155a38773a158660692f8ed040239.gif

    最后 DOM 树是 HTML 文档的映射关系和存留 HTML 元素对外的接口(如: 对JS),每一个节点是由 DOM 元素和节点属性组成。看一个例子:

    Hello World

    example.png

    复制代码

    20d16f10dc8fa105344a7d1d64bc442e.png

    解析完,进入交互阶段开始解析处于 'deferred mode' (that should be executed after the document is parsed)的脚本,执行完这些脚本后,文档状态为 complete,触发 load 事件。

    因为解析器是浏览器厂商的自定义,而 HTML语法特性比较特殊,所以解析器要有相关的容错机制,而这机制并不是 HTML 规范中强制规定,而是浏览器发展过程中的产品(友商之间互抄好的地方呗),但是后期的 HTML 5 规范中有部分容错机制的要求(webkit 的 HTML 解析器就有这样的注释)。

    上述只是描述到 HTML 文档的解析,那脚本和样式的解析顺序呢?

    因为 web 的模型式同步的原因,如果遇见内部

    毕竟突然中断 HTML 解析还是会影响页面展示的时间,那样我们需要规避不必要的因脚本而中断解析,那就是给

    当有脚本在执行的过程中,会触发「预解析」,此时是其他线程继续解析文档,找到需要请求加载的资源,加载这部分资源(并行加载,提高整体速度)。预解析只解析外部文件(外部脚本、样式或图片),此过程不修改 DOM 树。

    样式方面,因为解析样式并不会影响 DOM 树,所以不需要中断文档解析。但同时存在一个问题,当脚本获取样式信息时,但此时样式并没有加载就会报错。对应的解决手段就是阻塞脚本,但不用浏览器阻塞的阶段不同,firefox是当样式加载或解析的时候,会阻塞所有的脚本;而 webkit 是当脚本去访问那些确定会被为加载样式影响到的属性时,阻塞脚本。

    以上是刚刚完成了 DOM 树的构建,那我们马上进入后续阶段咯~

    下一篇文章

    展开全文
  • Jsoup HTML解析器

    2020-08-16 00:04:26
    文章目录Jsoup HTML解析器Jsoup介绍Jsoup使用环境搭建Jsoup解析URL解析字符串解析File文件解析Jsoup数据获取方式通过标签获取数据通过Id获取数据通过Class获取数据通过属性获取数据 Jsoup HTML解析器 在解析一个页面...

    Jsoup HTML解析器

    在解析一个页面的时候,虽然也能通过字符串的工具类、正则表达式等技术手段处理达到效果。但是怎么也不比专业的工具给力啊!

    Jsoup就是一款专门用来解析HTML文档的工具。并且Jsoup的使用方式和JQuery类似。

    Jsoup介绍

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

    以上内容来自百度百科

    • Jsoup主要功能:
      1. URL/文件/字符串中解析HTML文档。
      2. 使用DOM/CSS选择器解析出数据。
      3. 可以操作HTML的属性、文本、元素。(应该很少有人这么用吧!毕竟解析为主)

    Jsoup使用环境搭建

    如果创建的是Maven项目,可以导入下面几个依赖:

    <!--测试工具类-->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
        
    <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
    <!--Jsoup工具-->
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.11.3</version>
    </dependency>
        
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <!--IO相关工具类-->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
        
    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
    <!--字符串相关工具类-->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.4</version>
    </dependency>
    

    如果创建的是Web工程,可以引入以下几个Jar包:

    • commons-lang3-3.4.jar

    • commons-io-2.4.jar

    • junit-4.13.jar

    • jsoup-1.11.3.jar

    或者可以直接到网上的Maven仓库中下载其他版本的依赖。

    Jsoup解析

    URL解析

    @Test
    public void testUrl() throws IOException {
        //解析URL地址,获取文档
        //param1:URL对象
        //param2:超时时间
        Document document = Jsoup.parse(new URL("http://news.baidu.com/fashion"), 5000);
        //通过文档标签获取标签内的数据
        //获取标签为title的第一个元素,中的文本内容
        String title = document.getElementsByTag("title").first().text();
        //打印的结果就是获取到的文本内容
        System.out.println(title);
    }
    

    字符串解析

    下面代码的第三行FileUtils就是commons-io包提供的工具类,可以读取文件转成字符串,Jsoup解析读取出的字符串中HTML内容:

    @Test
    public void testString() throws IOException {
        String sHtml = FileUtils.readFileToString(new File("D:/百度一下,你就知道.html"));
        //解析字符串格式的HTML文档
        Document document = Jsoup.parse(sHtml);
        String title = document.getElementsByTag("title").first().text();
        System.out.println(title); //百度一下,你就知道
    }
    

    File文件解析

    上面是通过FileUtils工具类读取的文档,Jsoup自己也可以直接通过new File(path)解析出其中内容:

    @Test
    public void testFile() throws IOException {
        //加载文件解析HTML文档
        Document document = Jsoup.parse(new File("D:/百度一下,你就知道.html"), "utf-8");
        String title = document.getElementsByTag("title").first().text();
        System.out.println(title); //百度一下,你就知道
    }
    

    上面就是三种Jsoup解析HTML的方式。

    不管通过哪种途径得到document,都需要去获取document中的数据,不然拿到一堆字符串没有任何价值,下面就是Jsoup获取Document中数据的方式!

    Jsoup数据获取方式

    • 通过标签获取数据:getElementsByTag(tagName)
    • 通过Id获取数据:getElementById(idName)
    • 通过CLass获取数据:getElementsByClass(className)
    • 通过属性获取数据:getElementsByAttribute(attrName)
    • 通过属性及属性对应的值获取数据:getElementsByAttributeValue(attrName,value)
    • 通过属性及属性包含值获取数据:getElementsByAttributeValueContaining(attrName,containValue)
    • 通过选择器获取:select(cssQuery)
    • ……

    Jsoup获取文档数据的方法还有其他。看这些方法的名字和JQuery类似,使用起来应该会比较方便。

    写了一个测试的index.html文件,下面就以这个文件为示例展示数据获取方式:

    <!DOCTYPE html>
    <!-- The filename is index.html-->
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    	<meta content="always" name="referrer"><meta name="theme-color" content="#2932e1">
    
    	<title>百度一下,你就知道</title>
    </head>
    <body>
    
    	<p id="p1" class="pClass">P1内容</p>
    	<p id="p2" class="pClass">P2内容</p>
    	<p id="p3" class="pClass">P3内容</p>
    	<p id="p4" class="pClass">P4内容</p>
    
    	<a id="baidu" href="http://www.baidu.com/" class="aClass">百度一下,你就知道</a>
    	<a id="news" href="https://news.baidu.com/" class="aClass">百度新闻</a>
    	<a id="bilibili" href="https://www.bilibili.com/" class="aClass">哔哩哔哩</a>
    
    </body>
    
    </html>
    

    通过标签获取数据

    @Test
    public void testGetTextByTagName() throws IOException {
        //加载document文档
        Document document = Jsoup.parse(new File("D:/index.html"), "utf-8");
        //获取P标签中的文本内容
        Elements elements = document.getElementsByTag("p");
        for (Element element : elements) {
            System.out.println(element.text());
        }
    }
    

    在这里插入图片描述

    通过Id获取数据

        @Test
        public void testGetDateById() throws IOException {
            //加载document文档
            Document document = Jsoup.parse(new File("D:/index.html"), "utf-8");
            //获取id为baidu的标签中href属性的值以及标签中文本内容
            Element element = document.getElementById("baidu");
            String href = element.attributes().get("href");
            String text = element.text();
            System.out.println(href);
            System.out.println(text);
        }
    

    在这里插入图片描述

    通过Class获取数据

    @Test
    public void testGetDateByClass() throws IOException {
        //加载document文档
        Document document = Jsoup.parse(new File("D:/index.html"), "utf-8");
        //通过class获取数据
        Elements elements = document.getElementsByClass("pClass");
        for (Element element : elements) {
            System.out.println(element.text());
        }
    }
    

    在这里插入图片描述

    通过属性获取数据

    @Test
    public void testGetDateByAttr() throws IOException {
        //加载document文档
        Document document = Jsoup.parse(new File("D:/index.html"), "utf-8");
        //通过属性获取数据,获取href属性对应的元素中href属性中的值
        Elements elements = document.getElementsByAttribute("href");
        for (Element e : elements) {
            System.out.println(e.attributes().get("href"));
        }
    }
    

    在这里插入图片描述

    通过选择器获取数据

    标签选择器

    @Test
    public void testSelect() throws IOException {
        Document document = Jsoup.parse(new File("D:/index.html"), "utf-8");
        //标签选择器:参数,标签
        Elements elementsA = document.select("a");
        for (Element element : elementsA) {
            System.out.println(element.text());
        }
    }
    

    类选择器

    @Test
    public void testSelect() throws IOException {
        Document document = Jsoup.parse(new File("D:/index.html"), "utf-8");
        //类选择器:参数[ . + 类名]
        Elements elementsClass = document.select(".pClass");
        for (Element element : elementsClass) {
            System.out.println(element.text());
        }
    }
    

    id选择器

    @Test
    public void testSelect() throws IOException {
        Document document = Jsoup.parse(new File("D:/index.html"), "utf-8");
        //Id选择器:参数[ # + id]
        Element element = document.select("#baidu").first();
        System.out.println(element.text());
    }
    

    使用Id选择器有一个需要注意的就是,因为select()方法不能直接识别出使用的是哪一种选择类型,如果输入的是Id返回的仍然是Elements,但是明显地,Id只有一个,所以后面取first()第一个元素。

    属性选择器

    @Test
    public void testSelect() throws IOException {
        Document document = Jsoup.parse(new File("D:/index.html"), "utf-8");
        //属性选择器:参数,[属性名称]
        Elements elementsAttr = document.select("[href]");
        for (Element ele : elementsAttr) {
            System.out.println(ele.text());
        }
    }
    

    需要注意的一个小点就是,属性选择器中的参数要加上[]

    @Test
    public void testSelect() throws IOException {
        Document document = Jsoup.parse(new File("D:/index.html"), "utf-8");
        //属性选择器:[属性=值]
        Element elementsAttrValue = document.select("[href=http://www.baidu.com/]").first();
        System.out.println(elementsAttrValue.text());
    }
    

    组合选择器

    • 元素+Id

      Elements elements = document.select("p#p1");  //元素和Id的组合
      
    • 元素+Class

      Elements elements = document.select("p.pClass");  //元素和Class组合
      
    • 任意组合

      Elements elements = document.select("p[yourself=abc]");  //p元素中包含yourself属性并且值=abc的属性,当然还可以有其他的组合方式
      
    • 元素下(直接)子元素

      Elements elements = document.select("body #p1"); //body元素下面id为p1的子元素
      Elements elements = document.select("body>#p1"); //body元素下面id为p1的直接子元素,仅一层
      
    • ……

    展开全文
  • htmlcleaner html解析器

    2009-07-20 14:46:26
    htmlcleaner html解析器htmlcleaner html解析器
  • jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。 jsoup的主要功能如下: 从一个URL,文件或字符串中...
  • ruby html解析器

    2019-10-06 02:04:52
    ruby html解析器 新的Ruby解析HTML/XML的ruby库 - NokogiriAaron Patterson和Mike Dalessio开发了一个新的Ruby解析HTML/XML的ruby库 - Nokogiri。他的速度比目前应用的最广泛的Hpric...
  • 本篇文章是对php插件 HTMLPurifier HTML解析器进行了详细的分析介绍,需要的朋友参考下
  • 解析 在 HTML 解析器上工作。 这只是用 python 练习..我应该把它移到我的练习库中。
  • cobra html解析器

    2009-02-17 11:53:34
    cobra html解析器 包中包括源码和API
  • HTML解析器下载

    2019-03-20 13:22:13
    解析器能根据url解析出资源内容,爬取包括jpg图片、视频链接、音频链接等,支持迅雷下载模块。支持正则表达式查找。
  • :glowing_star: Java HTML解析器套件。 :house_with_garden: 网站: :red_heart_selector: 对于开发人员,由开发人员执行。 :lizard: 概述 Lagarto Suite是用Java编写HTML / XML解析器系列。 它由以下库组成:...
  • Landmark不会在其解析的文档中执行脚本,它不会实现Web标准委员会要求兼容性的一些更深奥HTML5解析器行为,并且在某些情况下(如果HTML浏览器模糊了HTML5解析器的功能),它会保留来自源文档的更多信息。...
  • tibet-html解析器

    2009-05-21 20:32:04
    html解析器,非常好用,文档齐全 html解析器,非常好用,文档齐全 html解析器,非常好用,文档齐全
  • HTML解析器 jsoup

    2010-10-27 10:14:49
    jsoup 是一款 Java 的HTML 解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。 jsoup的主要功能如下: 从一个URL,文件或...
  • jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
  • lol-html:具有基于CSS选择器的API的低输出延迟流HTML解析器
  • C++版HTML解析器

    2010-09-03 14:22:03
    C++版HTML解析器,能生成dom tree,也能SAX方式解析
  • XML/HTML解析器(Swift).zip

    2019-09-23 16:29:55
    XML/HTML解析器(Swift).zip,Ji (戟) is an XML/HTML parser for Swift

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,003
精华内容 4,801
关键字:

html解析器