Scrapy – 选择器
描述
当你搜刮网页时,你需要通过使用称为 选择器 的机制来提取HTML源的某一部分,通过使用XPath或CSS表达式来实现。选择器是建立在 lxml 库之上的,它用Python语言处理XML和HTML。
使用下面的代码片段来定义选择器的不同概念-
构建选择器
你可以通过传递 文本 或 TextResponse 对象来构造选择器类实例。根据提供的输入类型,选择器选择以下规则 −
使用上述代码,你可以从文本中构建为—
它将显示结果为–
你可以从响应中构建为–
它将显示结果为–
使用选择器
使用上述简单的代码片段,你可以构建XPath来选择定义在标题标签中的文本,如下所示
现在,你可以使用如下所示的 .extract( )方法提取文本数据-
它将产生如下结果
你可以显示如下所示的所有元素的名称-
它将显示元素为-
如果你想提取第一个元素,那么使用 .extract_first( )方法,如下所示
它将显示元素为-
嵌套选择器
使用上述代码,你可以使用 . xpath () 方法嵌套选择器来显示页面链接和图片来源,如下所示
它将显示结果为–
使用正则表达式的选择器
Scrapy允许使用正则表达式来提取数据,它使用 .re() 方法。从上面的HTML代码中,我们将提取如下所示的图像名称
上面一行显示的图像名称为-
使用相对的XPaths
当你使用以 / 开头的XPaths时,嵌套选择器和XPath都与文档的绝对路径有关,而不是选择器的相对路径。
如果你想提取 **< p> **元素,那么首先要获得所有的div元素-
接下来,你可以提取里面所有的 ‘ p ‘ 元素,方法是在XPath前加一个点,如 .//p ,如下图所示
使用EXSLT扩展
EXSLT是一个发布XSLT(Extensible Stylesheet Language Transformations)扩展的社区,它将XML文档转换为XHTML文档。你可以在XPath表达式中使用EXSLT扩展和注册的命名空间,如下表所示
序号 | 前缀和用法 | 命名空间 |
---|---|---|
1 | re 正则表达式 | http://exslt.org/regexp/index.html |
2 | set 操作 | http://exslt.org/set/index.html |
你可以在上一节中查看使用正则表达式提取数据的简单代码格式。
有一些XPath提示,在使用XPath与Scrapy选择器时很有用。