Scrapy - 选择器列表对象



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 响应正文中选择 description 元素,这将返回 SelectorList 对象:

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

您可以通过注册命名空间来获取 Google Base XML feed 中的价格值:

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

移除命名空间

在创建 Scrapy 项目时,您可以使用 Selector.remove_namespaces() 方法移除命名空间,并使用元素名称来正确地处理 XPath。

在项目中并非总是需要调用命名空间移除过程,原因有两个:

  • 移除命名空间需要重复处理文档并修改所有元素,这会导致 Scrapy 爬取文档的成本很高。

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

scrapy_selectors.htm
广告