XMLFeedSpider
被设计用于通过迭代各个节点来分析XML源,迭代器可以从 iternodes, xml, html 选择。 鉴于 xml 以及 html 迭代器需要先读取所有DOM
再分析而引起的性能问题, 一般还是推荐使用iternodes
。在使用错误标记解析XML时,使用html作为迭代器可能很有用。
XMLFeedSpider 类
class scrapy.contrib.spiders.XMLFeedSpider
要设置迭代器和标签名,必须定义以下类属性:
iterator
定义要使用的迭代器的字符串, 默认值为 iternodes,可选项如下:
iternodes
– 基于正则表达式的快速迭代器html
– 使用 Selector 的迭代器。特别提醒,它使用DOM解析,并且必须在内存中加载所有DOM,当数据量大的时候可能会产生问题。xml
– 使用 Selector 的迭代器。特别提醒,它使用DOM解析,并且必须在内存中加载所有DOM,当数据量大的时候可能会产生问题。
itertag
具有要迭代的节点(或元素)名称的字符串,例如:
namespaces
一个由 (prefix, url) 元组(tuple)所组成的list。 其定义了在该文档中会被spider处理的可用的命名空间。 prefix 及 uri 会被自动调用 register_namespace()函数注册命名空间。
您可以通过在 itertag
属性中指定节点的 namespace。
例如:
除了这些新的属性之外,该spider
也有以下可以覆盖(overrideable)的方法:
adapt_response(response)
该方法在spider分析response前被调用。您可以在response被分析之前使用该函数来修改内容(body)。 该方法接受一个response并返回一个response(可以相同也可以不同)。
parse_node(response, selector)
当节点符合提供的标签名时(itertag)该方法被调用。 接收到的response以及相应的 Selector 作为参数传递给该方法。 该方法返回一个 Item 对象或者 Request 对象 或者一个包含二者的可迭代对象(iterable)。
process_results(response, results)
当spider返回结果(item或request)时该方法被调用。 设定该方法的目的是在结果返回给框架核心(framework core)之前做最后的处理, 例如设定item的ID。其接受一个结果的列表(list of results)及对应的response。 其结果必须返回一个结果的列表(list of results)(包含Item或者Request对象)。
XMLFeedSpider 示例
该spider
十分易用,下边是其中一个例子:
输出结果: