我有一个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())
答案 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)