很久以前就想着试着用爬虫是模拟一下db小说网站...结果对网页这块又没什么头绪...接触了Django似乎可以去尝试一下了...
先找个小说网页模板,自行删改,保留一组显示小说信息的部分,对书名作者等进行参数设置...
<div class="store_collist">
{% for info in book_list %}
<div class="bookbox fl">
<div class="bookimg">
<a href={{info.index1}} target="_blank">
<img src={{info.img1}} alt="{{info.bookname1}}">
</a>
</div>
<div class="bookinfo">
<div class="bookname">
<a href={{info.index1}} target="_blank">{{info.bookname1}}</a>
</div>
<div class="bookilnk">
<a href="" target="_blank">{{info.author1}}</a>|
<a href="" target="_blank">{{info.type1}}</a>|
</div>
<div class="bookintro">{{info.intro1}}</div>
</div>
</div>
<div class="bookbox fr">
<div class="bookimg">
<a href={{info.index2}} target="_blank">
<img src={{info.img2}} alt="{{info.bookname2}}">
</a>
</div>
<div class="bookinfo">
<div class="bookname">
<a href={{info.index2}} target="_blank">{{info.bookname2}}</a>
</div>
<div class="bookilnk">
<a href="" target="_blank">{{info.author2}}</a>|
<a href="" target="_blank">{{info.type2}}</a>|
</div>
<div class="bookintro">{{info.intro2}}</div>
</div>
</div>
<div class="dotline"></div>
{% endfor %}
</div>
<div>
<a href="./{{pageInfo.lastPage}}">上一页</a>
<a href="./{{pageInfo.nextPage}}">下一页</a>
</div>
</div>
控制台执行 根据已有的表生成model 丢进对应的app文件夹下
python manage.py inspectdb > model.py
在 views.py 中新建一个处理函数,添加一个pageNum传递页数
查了点资料,内置函数貌似没有能搭配 limit 使用的,分页器也是在 获取 objects.all() 的基础上使用的,如果要用 limit 似乎只能用原生的sql语句去读取数据,这里暂时先获取全部。
小说的基本信息包装成字典,再放入一个列表里,最后传递到页面中,因为我这里的模板是两个为一行,所以这里将两条数据合并到一个字典里了。上下页信息直接放进单独的字典即可。
def books( request,pageNum ):
# cursor = connection.cursor()
# cursor.excute("select * from bqk limit 0,10")
# cursor.fetchall()
bookInfos = Bqk.objects.all() # 提取数据
bookCount = bookInfos.count() # 条数
lastPage = pageNum-1 if pageNum>1 else 1 # 上一页
nextPage = pageNum+1 if pageNum<bookCount/20+1 else pageNum<bookCount/20+1 # 下一页
pageInfo = {"lastPage": lastPage,
"nextPage": nextPage}
bls = bookInfos[(pageNum-1)*20:pageNum*20] # 取对应页数的20条数据
book_list = []
for i,j in zip(bls[::2],bls[1::2] ): # 2个为一组 设定参数
info = {
"bookname1" : i.novelname,
"author1" : i.author,
"intro1" : i.introduction,
"type1" : i.type,
"img1" : i.image,
"index1" : i.url,
"bookname2" : j.novelname,
"author2" : j.author,
"intro2" : j.introduction,
"type2" : j.type,
"img2" : j.image,
"index2" : j.url,
}
book_list.append(info)
return render(request, 'zhxs.html',
{'book_list': book_list,
'pageInfo' : pageInfo})
在urls中设置一下映射
path('booklist/<int:pageNum>',views.books)
效果:
上下页就演示下效果...可以找个插件包装下...