Scrapy:如何使用multipel请求填充分层项目

时间:2017-09-23 19:30:06

标签: python scrapy synchronization hierarchical

这是Multiple nested request with scrapy 的延伸。问因为提出的解决方案有缺陷:
它消除了异步,从而大大降低了刮削效率 2.处理链接“堆叠”时是否应出现异常,并且不会对任何项目进行yelded 3.如果有大量儿童用品怎么办?

处理(1)我考虑过这个:

class CatLoader(ItemLoader):

    def __int__(self, item=None, selector=None, response=None, parent=None, **context):
        super(self.__class__, self).__init__(item, selector, response, parent, **context)
        self.lock = threading.Lock()
        self.counter = 0

    def dec_counter(self):
        self.lock.acquire()
        self.counter += 1
        self.lock.release()

然后在解析器中:

    if len(urls) == 0:
        self.logger.warning('Cat without items, url: ' + response.url)
        item = cl.load_item()
        yield item
    cl.counter = len(urls)
    for url in urls:
        rq = Request(url, self.parse_item)
        rq.meta['loader'] = cl
        yield rq

parse_item()我能做到:

def parse_item(self, response):
    l = response.meta['loader']

    l.dec_counter()
    if l.counter == 0:
        yield l.load_item()

BUT!要处理每个函数中的2个:

def parse_item(self, response):
    try:
        l = response.meta['loader']

    finally:
        l.dec_counter()
        if l.counter == 0:
            yield l.load_item()

我认为这不是优雅的解决方案。那么有谁可以帮助更好的解决方案?另外我要将项目插入到数据库中,而不是json输出,所以也许最好创建带有promise的项目并制作pipline,解析子项以检查是否实现了promise(当项目插入到DB时),或类似是什么?

UPD:Hierchic项目:类别 - >文章 - >图片。所有要保存在具有适当关系的不同表中。所以: 1)文章必须列入表后类别。 2)文章必须知道它的类别的ID才能形成关系 图像记录也是如此

0 个答案:

没有答案