思路
1、前端页面
前端使用了bootstrap框架
2、信息获取
通过爬取百度搜索页面来获取搜索结果,具体实现可以参考我以前写过的爬虫文章
3、分页效果
在处理前端的请求时,每次都将搜索结果、搜索关键词和控制页数的变量pn传递到模板页面,在模板页面中根据pn的值来生成上一页和下一页的URL
具体实现如下:
def search_handler(request):
word = request.POST.get('word')
pn = request.POST.get('pn')
result = baidu.search(word, pn)
print(result)
return render(request, 'list.html', context={'search_result': result, 'pn': pn, 'word': word})
def page_handler(request):
word = request.GET.get('word')
pn = request.GET.get('pn')
result = baidu.search(word, pn)
print(result)
return render(request, 'list.html', context={'search_result': result, 'pn': pn, 'word': word})
<nav>
<ul class="pager">
{% if pn == '0' %}
<li class="previous disabled"><a href="#"><span aria-hidden="true">←</span> 上一页</a></li>
<li class="next"><a href="/s?word={{ word }}&pn={{ pn|add:10 }}">下一页 <span aria-hidden="true">→</span></a></li>
{% else %}
<li class="previous"><a href="/s?word={{ word }}&pn={{ pn|add:-10 }}"><span aria-hidden="true">←</span> 上一页</a></li>
<li class="next"><a href="/s?word={{ word }}&pn={{ pn|add:10 }}">下一页 <span aria-hidden="true">→</span></a></li>
{% endif %}
</ul>
</nav>
代码
完整代码已经上传至Github
结果