Scrapy - 普通的Spider(二)

XMLFeedSpider

这个Spider是用于解析XML的,它可以通过指定的节点迭代的解析XML。迭代器可以选择iternodes,xml或html。由于xml和html都需要一次性读取整个DOM然后才能解析XML,这样会有性能的问题,所以推荐使用iternodes迭代器。但是当解析有错误标记的XML时,使用html迭代器会有些帮助。 使用XMLFeedSpider必须定义以下类属性来设置迭代器和标签名: iterator
使用的迭代器。它的值可以是:
- ‘iternodes’ - 基于正则表达式的一个快速的迭代器。
- ‘html’ - 使用Selector的一个迭代器。它使用的是DOM解析,必须将所有的DOM载入内存中,这样对比较大的XML可能会是一个问题。
- ‘xml’ - 使用Selector的一个迭代器。它使用的是DOM解析,必须将所有的DOM载入内存中,这样对比较大的XML可能会是一个问题。
默认的值是iternodes。

itertag
将要迭代的节点(或元素)的名字。如:

itertag = 'product'

namespaces
一个(prefix, uri)的元组,定义了Spider将处理的文件中可以使用的命名空间。元组中的prefix和uri会使用register_namespace方法自动注册命名空间。
itertag属性的值可以使用指定节点(或元素)的命名空间来赋值。如:

class YourSpider(XMLFeedSpider):
    namespaces = [('n', 'http://www.sitemaps.org/schemas/sitemap/0.9')]
    itertag = 'n:url'
    # ...

除了这些新属性,还有以下可以重写的方法:
adapt_response(response)
在Spider开始解析response之前,当response从Spider的中间件刚返回时,接收response的一个方法。可以用来在解析response之前修改response的内容,该方法必须返回一个response。

parse_node(response, selector)
对与提供的标签名匹配的节点(或元素)调用该方法。接收response和Selector,必须重写这个方法,不然Spider不会工作。该方法必须返回一个Item对象或Request对象或包含前两者任意一个的可迭代对象。

**process_results(response, results)
对Spider返回的每一个结果(Item或request)调用该方法,其目的是在结果返回给框架的核心之前做最后的处理,例如设置item的ID。它接收结果的列表和response,必须返回一个结果的列表(Items或Requests)
Example:

from scrapy.spiders import XMLFeedSpider
from myproject.items import TestItem

class MySpider(XMLFeedSpider):
    name = 'example.com'
    allowed_domains = ['example.com']
    start_urls = ['http://www.example.com/feed.xml']
    iterator = 'iternodes' # This is actually unnecessary, since it's the default value
    itertag = 'item'

    def parse_node(self, response, node):
        self.logger.info('Hi, this is a <%s> node!: %s', self.itertag, ''.join(node.extract()))
        item = TestItem()
        item['id'] = node.xpath('@id').extract()
        item['name'] = node.xpath('name').extract()
        item['description'] = node.xpath('description').extract()
        return item
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值