scrapy完成后,Django重定向到结果页面

时间:2018-09-04 03:50:08

标签: python django scrapy

我有一个Django项目,其中包含一个拼凑的应用程序。

用户填写了一些表单字段后,我将填写的数据传递给Spider并抓取了一些页面。

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

当用户按下“提交”按钮时,结果页面为空白,因为蜘蛛程序尚未完成爬网并且数据不在数据库中。

我如何在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())

1 个答案:

答案 0 :(得分:0)

不确定我的答案是否可行,但是您可以尝试一下,或者是否有更好的主意可以分享。

在抓取函数中返回布尔值

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)