2015-09-05 16 views
-1

据我所知,BeautifulSoup和lxml能够提取html元素的dom结构。但我想自己做,因为我需要一个没有库存限制的高性能爬虫。所以有没有一种“简单”的方式来提取html元素的DOM结构而不使用Python库?

是否有一种“简单”的方式来提取html元素的dom结构而不使用python库?

我问这是因为我想通过仅在网站的前端搜索来查找html元素,然后在知道我想要哪个元素之后,我需要此元素的dom路径。

例如,计算器标志的此页面上的DOM路径是:

html > body.ask-page.new-topbar > div.container > div#header > div#logo > a 
+0

您需要*东西*实现[HTML5解析器算法](https://html.spec.whatwg.org/multipage/syntax.html#parsing)。你当然可以* *实现一个自己比Python更高性能的语言,准确地提供你想要的API,然后将其包装成Python的,但它是一个可怕的很多工作...... – zwol

回答

1

HTML是一种上下文无关文法并没有保证一个给定的HTML响应将是有效的XML明智的(例如,一个清晰的标签层次结构和一切具有匹配的结束标签)文档结构部分由浏览器猜测,部分使用特定规则创建,如果标签全部搞乱而不在层次结构中。

如果你真的想编写自己的HTML解析库,你的例子是限制在一个非常特殊类型的文本要匹配(这样粗的正则表达式不会帮助),然后再考虑下面的HTML片段,您可以尝试,并找出了DOM结构:

让我们开始与<p>猜测:

<p>blah blah 
<p>blah blah 
<p>blah blah 
<p>blah blah <img src="a.jpg"> <!-- where is this image? --> 

怎么样畸形的结束标记顺序?

<a href="test.html"><img src="a.jpg"> <b>this is a cool image </a></b> 

如何将错误的内容类型嵌套在一起?

<p>blah blah <div class="button"><img src="derp.png"></div></p> 

在这个例子中<p><div>开始之前被关闭,因为<p>不接受它flow content

但是,像美丽的图书馆已经配备了解析所有这些可怕的玩意儿和更多。

相关问题