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://www.cnblogs.com/attilax/

 

3. 浏览器解析html的原理和预防乱码

细节

  HTML文档是作带有字符编码信息之字节约流序列在互联网中传送的。字符编码信息可以在比如文档发送的HTTP响应头信息遭指定,也可于文档的 HTML标签中指定。浏览器根据字符编码信息用字节流转换为展示在浏览器上的字符。如果不明白怎么组织一个页面的字符,浏览器自然为无克是地渲染页面。绝大部分浏览器在起实践外JavaScript代码或者绘制页面之前还如缓冲一定数额之字节流,缓冲的同时她也如摸索有关的字符编码设定(一个值得注意的不等是IE6/7/8)。

  不同浏览器需要缓冲的字节流数量不同,另外要搜索不至编码设定,各浏览器默认的编码为殊。但是不管啊一样栽浏览器,如果以都缓冲了足够的字节流、开始渲染页面后才发觉指定的编码设定及其默认值不同,都见面促成更分析文档并重绘页面。如果编码的更动影响至了表面资源(例如css\js\media),浏览器还会见另行对资源进行呼吁。

  为了避免这些延迟,对另外超过1k(精确地即1024字节,这是咱们测试了之持有浏览器的无限可怜缓冲限制)的HTML文档,要抢指定字符编码。

  建议

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

  也HTML文档指定编码设定有几乎种方法:

  服务器端:通过web服务器的配置来指定编码参数,为具备text/html类型的文档指定带有正确编码信息之Content-Type头信息。例如Content-Type: text/html;charset=UTF-8

  客户端:在HTML代码中包含http-equiv=”content-type”的meta标签,并指定字符编码。例如 。

  如果可能的话,为公的web服务器做指定字符编码的HTTP头信息配置。某些浏览器(例如Firefox)在尽JavaScript之前会就此(比 其它浏览器)更缺少的推缓冲来检查头信息遭到是否指定字符编码。这意味其得以跨了针对性HTML标签的自我批评,缩短缓冲的字节数和延迟时间

 

4.  将meta标签放在head区域之太前方

  如果你免能够针对web服务器配置进行改动,又要经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

 

 

 

相关文章

网站地图xml地图