Python抓取小说数据项目分析(含源码地址在最后)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35522272/article/details/76472968

Python爬取网络小说数据,小说app产品开发文档

1.Python爬取数据过程分析

  • 哪些数据使我们需要的:

    1.首页数据:分类、排行、推荐书籍。
    2.可浏览的数据有:书名,图片,作者,类别,字数,是否已完结。
    3.点击进入小说详情页我们在上面的数据基础上我们还需要:小说简介,目录章节(包括章节名称和章节号码章节字数)
    4.小说每章阅读时,有具体章节的内容,并且上下章节的关联性

  • 根据数据需求,指定爬取得内容

    1.根据起点小说网页的html源码找到指定的内容节点,查询节点属性和规则,抓取节点内容。

  • 分析结果如下:(时间节点:17.07.27)

    由于不同时间网页节点格式可能出现差异性所以可能需要自行匹配。

- #### 重点问题如何找到每本书之间的关联性

  • #### 根据数据分析结果得到流程:
    首先入口是起点小说的主页入口:http://www.qidian.com/
    这个页面获取分类信息。分类信息只获取一次。具体分类数据可通过info页面数据抓取的类别进行筛选,排行通过总点击量进行自主排行。
    info页面:http://book.qidian.com/info/2750457#Catalog
    抓取小说的:书名,图片,作者,类别,字数,是否已完结,总点击量等详情信息。当然还得抓取该书籍的章节目录。
  • 章节数据需要关注的信息:
    章节的名称,当前是第几章节。章节可能重复可根据名称剔除重复。章节的链接:http://read.qidian.com/chapter/7X3dt6Dj9tI1/nqw-kbSmIeYex0RJOkJclQ2

- 具体章节的小说文本:进入章节页面,抓取章节内容,上下章节地址(保证之间的关系,方便浏览)

2.根据数据内容和需求制定的数据结构表

  • #### 表如下:
    1.小说表
字段名 字段意义
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

根据产品开发过程中的实际问题分析

1.小说文本内容存储数据库存在问题

由于我们小说的内容是按照每一章的内容存储到对应的内容表中,但是每一章的内容量还是不容小觑。正常的文章一章起码需要5到6千字,这个数据量存储到数据库表中真的不是一个理想的事情,并且根本插不进去。我的想法有以下:
- 将每一章节的文章分段,然后再插入到数据库中,每段可能只存500个字左右。这样做是能实现的,但是效率太低了,存的时候麻烦,那取的时候就更费事了,所以暂时不考虑。
- 文件类型存储。将小说按照每本小说存储到对应的文件中,文件名则为小说的url。有一个唯一性的关系,保证每本小说可通过文件名指定找到。所有章节存储到文件中,那么每一个章节又怎么获取和区分呢。我们存储文件的时候可以更具对应的格式来存储。因为我们爬去的小说内容也是按章节爬取的。所以,每章节存储的时候我们都可以指定开始和结束的关系,并且带上章节url的唯一标识。也可以通过json的格式存储,这样也方便解析。但是想了很久这个方法还是有缺陷:比如用户只需要预览第100章的内容,我们该如何来获取,文件的io操作肯定比数据库操作要慢,并且我们还需要再文件中定位搜索,这个效率实在是太低了。另辟蹊径。
- 依然是文件存储,这是趋势。但是不能按照小说来存储,需要按照章节来存储。我们将小说每一章节按照章节url存储到对应的文件中。然后我们将该章节的文件地址存储到数据库表中。这样方便我们浏览。

** 项目的源码地址:https://github.com/MrHangVIP/PythonTest

展开阅读全文

没有更多推荐了,返回首页