python - 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())
解决方案
不确定我的答案是否有效,但您可以尝试一下,或者如果有人有更好的想法,请分享。
在您的抓取函数中返回一个布尔值
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)
推荐阅读
- java - 具有一个元素的 LinkedBlockingQueue - 读取器/写入器竞争条件
- node.js - chat.postMessage 的问题 - channel_not_foud
- r - 获取 RandomForest 中单个树的重要性
- assembly - 从 8086 emu 读取一个字符串并输出回来
- c# - 将文本框值传递给 sql 查询 c# 应用程序
- vba - Word 表查找分段符,将行内容分成两行
- c - 如何使用 OpenSSL 库生成大素数?
- python - 使用beautifulsoup将字符串作为列表放入一行
- python - 反向未找到
- tensorflow - 是否有 dnnlib 的任何文档:NVlabs 项目中的附加库?