如何在django中的views.py文件中定义视图函数

时间:2015-12-20 15:01:06

标签: python django django-models web-scraping django-views

我想在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数据库中,

如何做到这一点,目前的问题是只有在我们刷新或请求页面时才会保存数据。

我保存数据而不依赖于数据库中的请求对象

0 个答案:

没有答案