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. excel2013超链接进不去,提示“您的组织策略不允许...”

    搜索regedit 然后找到HKEY_CURRENT_USER->Software->Classes->.html 右键修改或者双击修改数值数据为Htmlfile 关闭之后此窗口,关 ...

  2. 2)Win10-UWA开发 API參考 - 1

    孙广东  2015.8.23 大多数 Windows 执行时 API 如今适用于 Windows Phone 应用商店应用以及 Windows 应用商店应用,这意味着当你创建同一时候面向 Window ...

  3. Android之使用weight属性实现控件的按比例分配空间

    从今天開始,把看书时候的知识点整理成博客, 这个比較简单,预计有经验的都用过,weight属性 在做Android布局的时候,常常遇到须要几个控件按比例分配空间的情况 比方下图效果 在底部设置两个bu ...

  4. No connection could be made because the target machine actively refused it [::1]:808

    No connection could be made because the target machine actively refused it [::1]:808 1.首先查看端口占用情况, 在 ...

  5. Linux Screen命令使程序远离断网影响

    linux中强大的screen命令2008-12-02 21:53今天发现了一个“宝贝”,就是Linux的screen命令,对于远程登录来说,不仅提供了类似于nohup的功能,而且提供了我非常喜欢的“ ...

  6. App.config配置详解

    经上一篇文章https://www.cnblogs.com/luna-hehe/p/9104701.html发现自己对配置文件很是不了解,同样还是查了半天终于发现另一片宝贵文档https://www. ...

  7. IEEE的论文需要注意的一些

    详细看最近的IEEE会议模板的时候,忽然注意到表的注序号应该用字母:另外,引用未发表的论文,如果是archive上的要使用archive规定的方法,或者标注``unpublished''

  8. 使用Java开发高性能网站需要关注的那些事儿2

      近期各家IT媒体举办的业内技术大会让很多网站都在披露自己的技术内幕与同行们分享,大到facebook,百度,小到刚起步的网站.facebook,百度之类的大型网站采用的技术和超凡的处理能力的确给人 ...

  9. N!,斯特林近似

    题目链接 输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Input 第1行:一个数T,表示后面用作输入测试的数的数量.(1 <= T <= 1000) 第2 -  ...

  10. Uva 1605 Building for UN【构造法】

    题意:给出n个国家,给它们分配办公室,使得任意两个国家都有一对相邻的格子 看的紫书,最开始看的时候不理解 后来还是搜了题解--- 发现是这样的 比如说5个国家 应该输出 AAAA BBBB CCCC ...