Python 新手的爬虫实战

Posted by Calvin on 2019-01-19

在学完了 Python 基础、网络编程和数据库之后,我使用某 App (某知识付费产品) 进行了爬虫实践,以下是爬虫的具体操作步骤:
1、使用 Charles 抓取并解析 API 接口。
2、Python 代码编写并进行 API 源数据抓取存入本地数据库。
3、解析源数据并使用 Python 程序批量下载其音频文件。
4、处理音频对应的文稿数据,按照指定规则生成对应的 PDF 文件。

其中使用到的第三方库如下:

  • urllib 网络库
  • pymysql 数据库
  • pdfkit 生成 PDF

1、API 抓取和分析

使用 Charles 抓取其产品 API 接口,因为现在的 API 大多是 https 类型,所以此处需要配置了一个 Charles CA证书,然后正常抓取并分析了其产品几个主要 API,包括课程分类、课程分类下的课程、课程的内容列表、课程中每节课对应的详情。

2、Python 代码编写并保存课程数据至数据库

因为只有在查看单节课程详情时才验证用户身份(查看课程详情需要会员身份),所以我把课程分类数据存入了本地的 .json 文件,通过 Python 程序直接读取对应文件请求课程内容列表等基础数据并存入数据库。
点此查看此部分代码
把所有课程基本数据存入到数据库后,通过 Charles 提取出我的个人信息 (我是此 App 的会员用户,可以查看所有内容) 并模拟 App 进行网络请求,把单节课程的源数据请求并以 json 字符串的形式 update 到数据库。然后解析 json 文件提取出课程的音频链接。
点此查看此部分代码 此处代码删减了我会员身份相关的信息。

3、批量下载其音频文件

因为已经拿到了源数据并分析出了产品的音频链接,所以直接按照链接下载并按照指定路径和名称把 mp3 文件保存到本地即可。
点此查看此部分代码

4、处理文稿数据并生成 PDF 文件

有了音频文件接下来要处理文稿数据,因为毕竟听音频配合文稿才最合适嘛。因为此产品的文稿数据是分段拼接而成,此处需要根据 App 内的文稿格式分析其 json 结构并按照一定顺序拼接。
拼接好文稿后使用 pdfkit 生成对应的 PDF 文件,因为 pdfkit 可以直接解析 HTML 字符串并按照其格式生成 PDF,所以此处我使用了 HTML + CSS 进行简单排版导出到指定路径,按照课程名称生成 PDF 文件,至此数据抓取和下载已经全部完成。
点此查看此部分代码

5、后记

  1. 在使用我的账户抓取课程详情内容时,因为 API 接口调用会过多,我隐约担心账户会被封,但是我在 10 分钟内连续调用了 2000 余次 API 账号并无任何被封迹象,可见该产品在其安全性设计上存在一些缺陷。
  2. Python 真的很强大,因为我刚开始写 Python 水平还不是很高,但是整个过程下来代码不足 300 行,真的是很简洁。而且 Python 语言下的第三方库很多,比如说 pdfkit,你可以传入一个网页地址生成 PDF,也可以自己编写 HTML 代码使其按照你想要的样式生成丰富的 PDF 文件,不得不说真的很方便,当然类似的库还有很多。
  3. 面对各种各样的网络爬虫的存在,现在的 App 安全性相对还是较弱的,尤其是涉及到商业利益的核心数据,按理说用户读取这些数据必须验证其真实身份并进行读取次数限制。正是因为 App 这样的漏洞存在,像『得到』『喜马拉雅』『樊登读书会』等内容付费 App 中的课程被盗版的才会如此猖獗。
  4. 因为其抓取内容涉及到商业数据,所以此处代码仅展示抓取数据的思路,并没有展示我的个人账户信息,如果有幸被你查看了我的代码,也只能使用该代码获取公开的基础数据。
  5. 因为我有此产品的会员资格,所以此次数据抓取仅做技术实践,不做其他的商业用途,抓取的数据没有在网络上进行传播,我也删除了抓取的全部数据。
  6. 此处仅作一些技术思路的分享和自我记录,如果有侵权行为请及时告知,我会对文章/代码等进行删除处理。