据我所知,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
答案 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这样的图书馆已经准备好解析所有这些可怕的装置等等。