Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本号

1. 框架选型的要求
1

1.1. 文档多
1

1.2. 跨平台
1

2. html解析器特性:
1

2.1. jQuery 风格的 CSS 选择器
1

2.2. 操作 HTML 文档.
1

3. 浏览器解析html的原理以及防止乱码
2

4. 把meta标签放在head区域的最前面
4

5. HTML解析器
4

6. 參考
8

6.1.1. atitit. java jsoup html table的读取解析 总结 - attilax的专栏 ...
8

1. 框架选型的要求

1.1. 文档多

1.2. 跨平台

2. html解析器特性:

2.1. jQuery 风格的 CSS 选择器

· 对不信任的源的 HTML 进行清理

2.2. 操作 HTML 文档.

· jQuery 风格的 CSS 选择器

NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString);

NSoup.Nodes.Document doc = NSoup.NSoupClient.Connect("http://www.oschina.net/").Get();

ebClient webClient =聽new WebClient();

String HtmlString=Encoding.GetEncoding("utf-8").GetString(webClient.DownloadData("http://www.oschina.net/"));

NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(HtmlString);

WebRequest webRequest=WebRequest.Create("http://www.oschina.net/");

NSoup.Nodes.Document doc = NSoup.NSoupClient.Parse(webRequest.GetResponse().GetResponseStream(),"utf-8");

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

3. 浏览器解析html的原理以及防止乱码

细节

  HTML文档是作为带有字符编码信息的字节流序列在互联网中传送的。字符编码信息能够在随文档发送的HTTP响应头信息中指定,也能够在文档的 HTML标签中指定。浏览器依据字符编码信息将字节流转换为显示在浏览器上的字符。假设不知道怎样构造一个页面的字符,浏览器自然也不能正确地渲染页面。绝大部分浏览器在開始运行不论什么JavaScript代码或者绘制页面之前都要缓冲一定数量的字节流。缓冲的同一时候它们也要查找相关的字符编码设定(一个值得注意的例外是IE6/7/8)。

  不同浏览器须要缓冲的字节流数量不同。另外假设找不到编码设定,各浏览器默认的编码也不同。可是无论哪一种浏览器。假设在已经缓冲了足够的字节流、開始渲染页面之后才发现指定的编码设定与其默认值不同,都会导致又一次解析文档并重绘页面。

假设编码的变化影响到了外部资源(比如css\js\media)。浏览器甚至会又一次对资源进行请求。

  为了避免这些延迟。对不论什么超过1k(精确地说是1024字节,这是我们測试过的全部浏览器的最大缓冲限制)的HTML文档,要尽早指定字符编码。

  建议

  通过HTTP头信息或meta标签指定编码

  为HTML文档指定编码设定有几种方式:

  server端:通过webserver的配置来指定编码參数,为全部text/html类型的文档指定带有正确编码信息的Content-Type头信息。比如Content-Type: text/html;charset=UTF-8

  client:在HTML代码中包括http-equiv="content-type"的meta标签,并指定字符编码。比如 。

  假设可能的话,为你的webserver做指定字符编码的HTTP头信息配置。某些浏览器(比如Firefox)在运行JavaScript之前会用(比 其他浏览器)更短的延迟缓冲来检查头信息中是否指定字符编码。

这意味着它们能够跳过对HTML标签的检查,缩短缓冲的字节数和延迟时间

4.  把meta标签放在head区域的最前面

  假设你不能对webserver配置进行改动,又须要通过meta标签指定编码。要确保你用于指定编码的meta标签是文档中head标签的第一个子元 素。浏览器会在文档的前1024字节中寻找字符编码參数,因此为了避免性能损耗,编码參数在文档头部越早出现越好(译注:在IE6下面的版本号中,特定情况 下,假设该meta标签不是head的第一个子元素,则会被忽略

5. HTML解析器

HTML解析器的工作是解析HTML标记到解析树。

5.0.1.1. HTML语法定义

HTML的词汇与句法定义在w3c组织创建的规范中。当前版本号是HTML4,HTML5的工作正在进行中。

5.0.1.2. 不是上下文无关语法

在对解析器的介绍中看到。语法能够用类似BNF的格式规范地定义。不幸的是全部常规解析器的讨论都不适用于HTML(我提及它们并非为了娱乐,它们能够用于解析CSS和JavaScript)。

HTML无法用解析器所需的上下文无关的语法来定义。

过去HTML格式规范由DTD (Document Type Definition)来定义。但它不是一个上下文无关语法。

HTML与XML相当接近。XML有很多可用的解析器。HTML另一个XML变种叫XHTML,那么它们主要差别在哪里呢?差别在于HTML应用更加”宽容”,它容许你漏掉一些開始或结束标签等。它整个是一个“软”句法。不像XML那样严格死板。 总的来说这一看似细微的差别造成了两个不同的世界。一方面这使得HTML非常流行。由于它包容你的错误,使网页作者的生活变得轻松。

另一方面。它使编写语法格式变得困难。所以综合来说。HTML解析并不简单。现成的上下文相关解析器搞不定。XML解析器也不行。

5.0.1.3. 解析算法

如我们前面看到的,HTML无法使用自上而下或自下而上的解析器来解析。

理由例如以下:

1. 语言的宽容特点

2. 浏览器须要对无效HTML提供容错性的事实。

3. 解析过程的重复。

通常解析过程中源代码不会变化。但在HTML中,script标签包括”document.write”时能够加入内容,即解析过程实际上还会改变源代码。

浏览器创建了自己的解析器来解析HTML文档。

HTML5规范里对解析算法有详细的说明,解析由两部分组成:分词与构建树。

分词属于词法分析部分。它把输入解析成符号序列。在HTML中符号就是開始标签,结束标签。属性名称和属生值。

分词器识别这些符号并将其送入树构建者,然后继续分析处理下一个符号。直到输入结束

5.0.1.4. 分词算法

算法的输出是HTML符号。算法能够用状态机来描写叙述。

每个状态从输入流中消费一个或多个字符。并依据它们更新下一状态。决策受当前符号状态和树的构建状态影响。这意味着相同的字符可能会产生不同的结果,取决于当前的状态。算法太复杂,我们用一个样例来看看它的原理。

基础演示样例。分析以下的标签:

<html> <body> Hello world </body></html>

初始状态是”Data state”,当遇到”<“时状态改为“Tag open state”。吃掉”a-z”字符组成的符号后产生了”Start tag token”,状态变更为“Tag name state”。我们一直保持此状态。直到遇到”>”。每一个字符都被追加到新的符号名上。

在我们的样例中,解出的符号就是”html”。

当碰到”>”时,当前符号完毕。状态改回“Data state”。”<body>”标签将会以相同的方式处理。

如今”html”与”body”标签都完毕了,我们回到“Data state”状态。

吃掉”H”(”Hello world”第一个字母)时会产生一个字符符号。直到碰到”</body>”的”<“符号。我们就完毕了一个字符符号”Hello world”。

如今我们回到“Tag open state”状态。吃掉下一个输入”/”时会产生一个”end tag token”并变更为“Tag name state”状态。相同,此状态保持到我们碰到”>”时。

这时新标签符号完毕。我们又回到“Data state”。相同”</html>”也会被这样处理。

5.0.1.5. 树的构建算法

当解析器被创建时。文档对象也被创建了。在树的构建过程中DOM树的根节点(Documen)将被改动,元素被加入到上面去。

每个分词器完毕的节点都会被树构建器处理。规范中定义了每个符号与哪个DOM对象相关。

除了把元素加入到DOM树外,它还会被加入到一个开放元素堆栈。这个堆栈用于纠正嵌套错误和标签未关闭错误。

这个算法也用状态机描写叙述。它的状态叫做”insertion modes”。

让我们看看以下输入的树构建过程:

<html> <body> Hello world </body></html>

树的构建过程中,输入就是分词过程中得到的符号序列。

第一个模式叫“initial mode”。

接收 html 符号后会变成“before html”模式并又一次处理此模式中的符号。这会创建一个HTMLHtmlElement元素并追加到根文档节点。

然后状态改变为“before head”。我们收到”body”时,会隐式创建一个HTMLHeadElement,虽然我们没有这个标签,它也会被创建并加入到树中。

如今我们进入“in head”模式,然后是“after head”,Body会被又一次处理,创建HTMLBodyElement元素并插入,然后进入“in body”模式。

字符符号”Hello world”收到后会创建一个”Text”节点,全部字符都被一一追加到上面。

收到body结束标签后进入 “after body” 模式,收到html结束标签后进入“after after body”模式。

全部符号处理完后将终止解析

6. 參考

atitit.jsoup html table的读取解析 总结

6.0.1. atitit. java jsoup html table的读取解析 总结 - attilax的专栏 ...

好用的採集解析工具_HTML解析利器HtmlAgilityPack_凤凰涅磐_新浪博客.html

浏览器怎么解析HTML_IT知识问答_希赛网.html

浏览器是如何工作的:渲染引擎,HTML解析(连载二) – 携程设计委员会.html

HTML解析利器HtmlAgilityPack - 周公(周金桥)的专栏 - 51CTO技术博客.html

Atitit.html解析器的选型&#160;jsoup&#160;nsoup&#160;,java&#160;c#&#160;.net&#160;版本号的更多相关文章

  1. Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本

    Atitit.html解析器的选型 jsoup nsoup ,java c# .net 版本 1. 框架选型的要求1 1.1. 文档多1 1.2. 跨平台1 2. html解析器特性:1 2.1. j ...

  2. SpringMVC自动封装List对象 —— 自定义参数解析器

    前台传递的参数为集合对象时,后台Controller希望用一个List集合接收数据. 原生SpringMVC是不支持,Controller参数定义为List类型时,接收参数会报如下错误: org.sp ...

  3. spring mvc: 资源绑定视图解析器(不推荐)

    spring mvc: 资源绑定视图解析器(不推荐) 不适合单控制器多方法访问,有知道的兄弟能否告知. 访问地址: http://localhost:8080/guga2/hello/index 项目 ...

  4. spring mvc: 属性方法名称解析器(多动作控制器)MultiActionController/ControllerClassNameHandlerMapping/PropertiesMethodNameResolver

    spring mvc: 属性方法名称解析器(多动作控制器) 加入控制器是StudentContrller.java,里面有3个方法 index,add,remove 那么访问地址是: http://l ...

  5. atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  6. jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址

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

  7. jsoup Java HTML解析器:使用选择器语法来查找元素

    jsoup Java HTML解析器:使用选择器语法来查找元素 使用选择器语法来查找元素 问题 你想使用类似于CSS或jQuery的语法来查找和操作元素. 方法 可以使用Element.select( ...

  8. Atitit。Tree文件解析器的原理流程与设计实现  java  c# php js

    Atitit.Tree文件解析器的原理流程与设计实现  java  c# php js 1. 解析原理与流程1 1.1. 判断目录  ,表示服  dirFlagChar = "└├─&quo ...

  9. Jsoup -- 网络爬虫解析器

    需要下载jsoup-1.8.1.jar包 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQue ...

随机推荐

  1. 【【henuacm2016级暑期训练】动态规划专题 D】Writing Code

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二维费用背包. f[i][j][k] 前i个人,写了j行,bug不超过k的方案数. 可以把每个人看成是一个物品. 它可以无限拿.然后 ...

  2. 【codeforces 229C】Triangles

    [题目链接]:http://codeforces.com/problemset/problem/229/C [题意] 给你一张完全图; 然后1个人从中选择m条边; 然后另外一个人从中选择剩余的n*(n ...

  3. Mysql如何避免全表扫描的方法

    在以下几种条件下,MySQL就会做全表扫描: 1>数据表是在太小了,做一次全表扫描比做索引键的查找来得快多了.当表的记录总数小于10且记录长度比较短时通常这么做. 2>没有合适用于 ON ...

  4. 讲一讲java异常及自定义异常

    1.异常,说白了.两种,一种就是就是不能让代码通过编译的异常.另一种就是程序运行期间出现的异常.异常就是错误,只要出现异常,程序就不会向下运行了.就不会执行后面的代码了.这时候就可以通过显示statc ...

  5. server.htaccess 具体解释以及 .htaccess 參数说明

    .htaccess文件(或者"分布式配置文件")提供了针对文件夹改变配置的方法. 即.在一个特定的文档文件夹中放置一个包括一个或多个指令的文件, 以作用于此文件夹及其所有子文件夹. ...

  6. weblogic部署struts2项目訪问action404错误

    近期有个project部署到tomcat上是正常的,部署到weblogic上时訪问action报404错误.依据报错日志.在网上找到了原因例如以下: 部署到weblogic上.struts.xml配置 ...

  7. JDBC-连接数据库代码

    package com.zxc.connection; import java.sql.Connection; import java.sql.DriverManager; public class ...

  8. 从头认识java-15.3 使用HashSet须要注意的地方

    这一章节我们来讨论一下使用Set的各种实现须要注意的地方. Set接口的经常使用实现类有:HashSet.TreeSet,LinkedHashSet 1.HashSet 大家对于HashSet的印象都 ...

  9. IE input X 去掉文本框的叉叉和password输入框的眼睛图标

    IE input X 去掉文本框的叉叉和password输入框的眼睛图标 从IE 10開始,type="text" 的 input 在用户输入内容后.会自己主动产生一个小叉叉(X) ...

  10. Java -- XML解析工具dom4j

    前言 XML现已成为一种通用的数据交流方式,它的平台无关性.语言无关性.系统无关性.给数据集成与交互带来了极大的方便,对于XML的解析有四种方式:DOM生成和解析XML文档,SAX生成和解析XML文件 ...