这是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才能形成关系 图像记录也是如此