Python 刚刚学会了刮取数据并将其存储在我的数据库中,但它只刮取一个对象
首先,我是一个新手,我对python和Django还不熟悉,最近我刚刚尝试过抓取数据并将其存储在数据库中。我已经让它工作了。它只会刮取一个对象并存储它。不是多个对象。现在我正在本地开发,并试图解决这个问题。我的观点是这样的Python 刚刚学会了刮取数据并将其存储在我的数据库中,但它只刮取一个对象,python,django,heroku,web-scraping,Python,Django,Heroku,Web Scraping,首先,我是一个新手,我对python和Django还不熟悉,最近我刚刚尝试过抓取数据并将其存储在数据库中。我已经让它工作了。它只会刮取一个对象并存储它。不是多个对象。现在我正在本地开发,并试图解决这个问题。我的观点是这样的 def practice(request): world = get_world_too() for entry in world: post = Post() post.title = entry['text']
def practice(request):
world = get_world_too()
for entry in world:
post = Post()
post.title = entry['text']
post.image_url = entry['src']
post.save()
template = "blog/post/noindex.html"
context = {
}
return render(request, template, context)
这就是函数
def get_world_too():
url = 'http://www.example.org'
html = requests.get(url, headers=headers)
soup = BeautifulSoup(html.text, 'html5lib')
titles = soup.find_all('section', 'box')[:9]
entries = [{'href': url + box.a.get('href'),
'src': box.img.get('src'),
'text': box.strong.a.text,
} for box in titles]
return entries
如果我刷新页面,它只会刮取和存储多个对象。但是我的函数被设置为9,所以我想这至少会有9个对象存储在我的数据库中。在视图中,我有一个循环
for entry in world:
post = Post()
post.title = entry['text']
post.image_url = entry['src']
post.save()
那么循环不应该得到所有九个对象吗?我也不知道,这不是专业的方法。正如我所说,我只是在练习。最终,我想将其设置为一个heroku cron作业,在一天中运行几次。但就目前而言,我如何让它在一次拍摄中刮取多个对象,并将其保存到我的数据库中 由于这条线,它只经过一次循环:
返回呈现(请求、模板、上下文)
return
在函数第一次运行时(在第一个循环中)返回整个函数。如果要遍历每个循环,然后返回,请将return
移出循环,如下所示:
def practice(request):
world = get_world_too()
for entry in world:
post = Post()
post.title = entry['text']
post.image_url = entry['src']
post.save()
template = "blog/post/noindex.html"
context = {}
# not in the loop anymore
return render(request, template, context)
这个建议解决了这个问题。这个错误使我认为应该在函数中包含循环。我可能会抓住那个凹痕,它会更干净。谢谢