Scrapy - Selectorlist 对象

HTML 响应中的选择器示例

以下是 HTMLResponse 中的一些示例,我们将使用选择器实例化 HTMLResponse 对象,如下所示 −

res = Selector(html_response)

您可以从 HTML 响应主体中选择 h2 元素,它将 SelectorList 对象返回为 −

>>res.xpath("//h2")

您可以从 HTML 响应主体中选择 h2 元素,它将 unicode 字符串列表返回为 −

>>res.xpath("//h2").extract()

它返回 h2 元素。

>>res.xpath("//h2/text()").extract()

它返回 h2 标签下定义的文本,不包括 h2 标签元素。

您可以遍历 p 标签并将 class 属性显示为 −

for ele in res.xpath("//p"):
print ele.xpath("@class").extract()

XML 响应上的选择器示例

以下是 XMLResponse 上的一些示例,我们将使用选择器实例化 XMLResponse 对象,如下所示如下 −

res = Selector(xml_response)

您可以从 XML 响应主体中选择描述元素,它将 SelectorList 对象返回为 −

>>res.xpath("//description")

您可以通过将命名空间注册为 − 从 Google Base XML 供稿中获取价格值

>>res.register_namespace("g", "http://base.google.com/ns/1.0")
>>res.xpath("//g:price").extract()

删除命名空间

在创建 Scrapy 项目时,您可以删除使用 Selector.remove_namespaces() 方法删除命名空间,并使用元素名称与 XPath 正确配合使用。

有两个原因不总是在项目中调用命名空间删除过程 −

  • 您可以删除需要重复文档并修改所有元素的命名空间,这会导致使用 Scrapy 抓取文档的昂贵操作。

  • 在某些情况下,您需要使用命名空间,这些命名空间可能与某些元素名称和命名空间发生冲突。这种情况经常发生。

scrapy_selectors.html