首页 > 解决方案 > Django在scrapy完成后重定向到结果页面

问题描述

我有一个带有scrapy应用程序的Django项目。

在用户填写一些表单字段后,我将填写的数据传递给蜘蛛并爬取一些页面。

一切都像魅力一样工作,正在填充数据库。除了一件事。

当用户按下提交按钮时,结果页面是空白的,因为蜘蛛没有完成爬取并且数据不在数据库中。

在 Django 视图中,我如何才能知道爬虫已经完成?

这是我的代码:

def search_process(request):
    """
    Get data from the user and redirect him to results page.
    """
    db = get_db()

    process_number = request.POST.get('process_number', '').strip()
    court = request.POST.get('court', '').strip()

    start_crawl(process_number, court)

    process = db.processes.find_one({
        'process_number': process_number,
        'court': court
    })

    context = {
        'process': process,
    }

    return render(request, 'process_result.html', context)


def start_crawl(process_number, court):
    """
    Starts the crawler.

        Args:
            process_number (str): Process number to be found.
            court (str): Court of the process.
    """
    runner = CrawlerRunner()
    dispatcher.connect(reactor.stop, signal=signals.spider_closed)
    process_info = runner.crawl(ProcessesSpider,
                                process_number=process_number,
                                court=court)
    process_info.addBoth(lambda _: reactor.stop())

标签: pythondjangoscrapy

解决方案


不确定我的答案是否有效,但您可以尝试一下,或者如果有人有更好的想法,请分享。

在您的抓取函数中返回一个布尔值

def start_crawl(process_number, court):
    ....rest of your code....
    return True

并在您的视图功能

 def search_process(request):
    ...rest of your code...
    crawling = start_crawl(process_number, court)
    if crawling:
        return render(request, 'process_result.html', context)

推荐阅读