1.首页数据:分类、排行、推荐书籍。
2.可浏览的数据有:书名,图片,作者,类别,字数,是否已完结。
3.点击进入小说详情页我们在上面的数据基础上我们还需要:小说简介,目录章节(包括章节名称和章节号码章节字数)
4.小说每章阅读时,有具体章节的内容,并且上下章节的关联性
1.根据起点小说网页的html源码找到指定的内容节点,查询节点属性和规则,抓取节点内容。
由于不同时间网页节点格式可能出现差异性所以可能需要自行匹配。
字段名 | 字段意义 |
---|---|
id | 表id |
novelId | 就是小说的url |
name | 小说名称 |
clickNum | 点击量 |
type | 类型 |
wordsNum | 字数 |
author | 作者 |
isFinish | 是否完结 |
brief | 简介 |
imageUrl | 图片地址 |
infoUrl | 小说地址 |
2.章节表
字段名 | 字段意义 |
---|---|
id | |
novelId | 小说id |
name | 章节名称 |
num | 章节数量 |
chapterUrl | 章节url |
clickNum | 点击量 |
3.内容表
字段名 | 字段意义 |
---|---|
id | |
chapterUrl | 章节url |
content | 章节内容 |
nextUrl | 下一章节url |
preurl | 上一章节url |
由于我们小说的内容是按照每一章的内容存储到对应的内容表中,但是每一章的内容量还是不容小觑。正常的文章一章起码需要5到6千字,这个数据量存储到数据库表中真的不是一个理想的事情,并且根本插不进去。我的想法有以下:
- 将每一章节的文章分段,然后再插入到数据库中,每段可能只存500个字左右。这样做是能实现的,但是效率太低了,存的时候麻烦,那取的时候就更费事了,所以暂时不考虑。
- 文件类型存储。将小说按照每本小说存储到对应的文件中,文件名则为小说的url。有一个唯一性的关系,保证每本小说可通过文件名指定找到。所有章节存储到文件中,那么每一个章节又怎么获取和区分呢。我们存储文件的时候可以更具对应的格式来存储。因为我们爬去的小说内容也是按章节爬取的。所以,每章节存储的时候我们都可以指定开始和结束的关系,并且带上章节url的唯一标识。也可以通过json的格式存储,这样也方便解析。但是想了很久这个方法还是有缺陷:比如用户只需要预览第100章的内容,我们该如何来获取,文件的io操作肯定比数据库操作要慢,并且我们还需要再文件中定位搜索,这个效率实在是太低了。另辟蹊径。
- 依然是文件存储,这是趋势。但是不能按照小说来存储,需要按照章节来存储。我们将小说每一章节按照章节url存储到对应的文件中。然后我们将该章节的文件地址存储到数据库表中。这样方便我们浏览。
** 项目的源码地址:https://github.com/MrHangVIP/PythonTest