我想在views.py文件中创建一个视图函数,该文件在特定的时间间隔内运行,而不依赖于请求对象,这在django中是可能的 我正在做一个使用bs4,request和django抓取网络数据的简单项目,到目前为止,我能够抓取数据并将其呈现给我的django views.py。
来自不同网站的抓取数据遵循以下格式
news_title = 'were-these-remote-wild-islands'
news_url = 'http://bbc.co.uk/travel/see-the-dark-side-of-climate-change'
我的视图函数有以下代码行
from .bbc import bbc_crawler
from .models import News
def collect_data(request):
'''
aggregrate all the news from each
news portal
'''
allnews = []
#return dict obj {'title':'climate change', 'url':'http://bbc.co.uk'}, {'title':'t', 'url':'http://url.com'}
allnews.append(bbc_crawler())
for news in allnews:
for eachnews,link in news.items():
#Problem is for every request the same data pushed to the database, need a solution to push the data after every 5 minutes, without depending on this function
News.objects.create(title=eachnews, url=link, source=source)
return render(request, 'news/index.html', {'allnews':allnews, 'source': source})
上面代码的问题是,上面的视图函数只在我们访问url时运行,该url指向此urls.py文件中定义的此视图函数
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.news, name="index"),
]
当我刷新该URL时,每次将相同的重复数据存储在数据库中。
我想要每5分钟运行一次爬虫的解决方案,并将已爬网的数据保存到数据库中。
我在views.py文件中何处运行搜寻器,以便每5分钟保存一次数据,而不会复制数据,也不依赖于请求对象。我想每隔5分钟将已爬网数据保存在django数据库中,
如何做到这一点,目前的问题是只有在我们刷新或请求页面时才会保存数据。
我保存数据而不依赖于数据库中的请求对象