【问题标题】:How does Scrapy (Open Source Web Scraping Framework) works?Scrapy(开源 Web 抓取框架)如何工作?
【发布时间】:2019-05-26 01:51:39
【问题描述】:
引用自 Scrapy 官方文档:
Scrapy 有自己的数据提取机制。它们被称为选择器,因为它们“选择”由 XPath 或 CSS 表达式指定的 HTML 文档的某些部分。 Source
读完后,我仍然不确定 Scrapy 是否可以通过使用 XPath/CSS 表达式直接选择 HTML 文档的一部分或从浏览器呈现的 DOM 树中选择节点来工作?
DOM Parsing 和 HTML Parsing 到底是不是一样还是一头雾水……
【问题讨论】:
标签:
parsing
dom
web-scraping
scrapy
data-extraction
【解决方案1】:
读完后,我仍然不确定 Scrapy 是否可以通过使用 XPath/CSS 表达式直接选择 HTML 文档的一部分或从浏览器呈现的 DOM 树中选择节点来工作?
肯定是前者,因为绝对不涉及浏览器。甚至“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 Parsing 和 HTML Parsing 到底是不是一样还是一头雾水……
严格来说,我相信它们是不同的。例如,lxml 能够解析 HTML,但它以自己的方式进行解析,并实现了与xml.etree 兼容的对象树,而不是DOM 的对象树。有一个 minimal DOM library 和 html5lib can target,这是您最接近“浏览器将构建的内容”的结果