Scrapy官方文档中的报价:
Scrapy带有其自身的数据提取机制。之所以称为选择器,是因为它们“选择”了XPath或CSS表达式指定的HTML文档的某些部分。 Source
阅读此书后,我仍然不确定Scrapy是否可以通过使用XPath / CSS表达式直接选择HTML文档的一部分或从浏览器呈现的DOM Tree中选择节点来工作?
仍然困惑DOM解析和HTML解析是否相同...
答案 0 :(得分:1)
阅读此书后,我仍然不确定Scrapy是否可以通过使用XPath / CSS表达式直接选择HTML文档的一部分或从浏览器呈现的DOM Tree中选择节点来工作?
可以肯定的是前者,因为绝对不涉及浏览器。甚至“ CSS”部分也只是XPath部分的语法糖,可以通过打印出“进行中”的Selector
来看到:
>>> print(Selector(text="<html><div class='foo'></div></html>").css(".foo"))
[<Selector xpath="descendant-or-self::*[@class and contains(concat(' ', normalize-space(@class), ' '), ' foo ')]" data='<div class="foo"></div>'>]
仍然困惑DOM解析和HTML解析是否相同...
严格来说,我相信它们是不同的。例如,lxml能够解析HTML,但是它以其自己的方式解析,并实现了xml.etree
兼容而不是DOM兼容的对象树。 minimal DOM library有一个html5lib can target,它与“浏览器将构建的内容”最接近。