有没有"容易"如何在不使用python库的情况下提取html元素的dom结构?

时间:2015-09-05 16:27:13

标签: python html dom

据我所知,BeautifulSoup和lxml能够提取html元素的dom结构。但我想自己做,因为我需要一个没有libary限制的高性能爬虫。所以

是否有"容易"如何在不使用python库的情况下提取html元素的dom结构?

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

例如,此页面上stackoverflow徽标的DOM路径为:

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

1 个答案:

答案 0 :(得分: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

然而,像beautifulsoup这样的图书馆已经准备好解析所有这些可怕的装置等等。