我正在开发django,我已经构建了一个电子邮件爬网程序,它可以在基本url的链接上查找电子邮件。。。我想将结果输入到作为站点数据库的db.sqlite3文件中。我的爬行器在后台执行芹菜任务。我有什么方法可以让任务在最后将其添加到数据库中。我正试着用post方法来做,但没有成功。
tasks.py
from celery.utils.log import get_task_logger
from .forms import CrawlUpForm
from .craw import crawler
import time
app = Celery(broker='amqp://')
@app.task
def startcraw(base,url,emails):
mylist= crawler(base,url,emails)
for em in mylist:
new_entry = Crawler(site=base, max_links=20, max_emails=333,emails=em)
new_entry.save()
answer= ', '.join(mylist)
return answer
我想把答案添加到sql数据库中(它包含电子邮件、链接和其他东西)
我的观点.py:
from tasks import startcraw
import time
def home(request):
form = SignUpForm(request.POST or None)
if form.is_valid():
save_it= form.save(commit=False)
save_it.save()
messages.success(request,"Working, please wait........")
baseurl=form.cleaned_data['site']
maxemails=form.cleaned_data['max_emails']
maxurl=form.cleaned_data['max_links']
startcraw.delay(base=baseurl,url=maxurl,emails=maxemails)
return HttpResponseRedirect('/done/')
return render_to_response("signup.html",locals(),context_instance=RequestContext(request))
models.py:
class Crawler(models.Model):
site=models.CharField(max_length=250,null=True,blank=False)
max_links=models.IntegerField(default=5,max_length=10,blank=True)
max_emails=models.IntegerField(default=5,max_length=10,blank=True)
emails = models.CharField(max_length=999999,null=True,blank=False)
我添加了models.py。在我的tasks.py中,我在mylist-var中收到一份电子邮件列表现在不要关心其他变量。。。
为什么要发布它?您可以从Celery脚本直接访问模型,只需在那里创建即可。