python爬取书籍信息

前言

文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

***/noteshare?id=3054cce4add8a909e784ad934f956cef

mitmdump 爬取 “得到” App 电子书信息

“得到” App 是罗辑思维出品的一款碎片时间学习的 App,App 内有很多学习资源。不过 “得到” App 没有对应的网页版,所以信息必须要通过 App 才可以获取。这次我们通过抓取其 App 来练习 mitmdump 的用法。

爬取目标

我们的爬取目标是 App 内电子书版块的电子书信息,并将信息保存到 MongoDB,如图所示。

python爬取“得到”App 电子书信息

我们要把图书的名称、简介、封面、价格爬取下来,不过这次爬取的侧重点还是了解 mitmdump 工具的用法,所以暂不涉及自动化爬取,App 的操作还是手动进行。mitmdump 负责捕捉响应并将数据提取保存。

2. 准备工作

请确保已经正确安装好了 mitmproxy 和 mitmdump,手机和 PC 处于同一个局域网下,同时配置好了 mitmproxy 的 CA 证书,安装好 MongoDB 并运行其服务,安装 PyMongo 库,具体的配置可以参考第 1 章的说明。

3. 抓取分析

首先探寻一下当前页面的 URL 和返回内容,我们编写一个脚本如下所示:

def response(flow): print(flow.request.url) print(flow.response.text)

这里只输出了请求的 URL 和响应的 Body 内容,也就是请求链接和响应内容这两个最关键的部分。脚本保存名称为 script.py。

接下来运行 mitmdump,命令如下所示:

mitmdump -s script.py

打开 “得到” App 的电子书页面,便可以看到 PC 端控制台有相应输出。接着滑动页面加载更多电子书,控制台新出现的输出内容就是 App 发出的新的加载请求,包含了下一页的电子书内容。控制台输出结果示例如图 所示。

python爬取“得到”App 电子书信息

可以看到 URL 为 ***/v3/discover/bookList 的接口,其后面还加了一个 sign 参数。通过 URL 的名称,可以确定这就是获取电子书列表的接口。在 URL 的下方输出的是响应内容,是一个 JSON 格式的字符串,我们将它格式化,如图 所示。

python爬取“得到”App 电子书信息

格式化后的内容包含一个 c 字段、一个 list 字段,list 的每个元素都包含价格、标题、描述等内容。第一个返回结果是电子书《情人》,而此时 App 的内容也是这本电子书,描述的内容和价格也是完全匹配的,App 页面如图所示。

python爬取“得到”App 电子书信息

这就说明当前接口就是获取电子书信息的接口,我们只需要从这个接口来获取内容就好了。然后解析返回结果,将结果保存到数据库。

4. 数据抓取

接下来我们需要对接口做过滤限制,抓取如上分析的接口,再提取结果中的对应字段。

这里,我们修改脚本如下所示:

import jsonfrom mitmproxy import ctx def response(flow): url = '***/v3/discover/bookList' if flow.request.url.startswith(url): text = flow.response.text data = json.loads(text) books = data.get('c').get('list') for book in books: ctx.log.info(str(book))

重新滑动电子书页面,在 PC 端控制台观察输出,如图所示。

python爬取“得到”App 电子书信息

控制台输出

现在输出了图书的全部信息,一本图书信息对应一条 JSON 格式的数据。

5. 提取保存

接下来我们需要提取信息,再把信息保存到数据库中。方便起见,我们选择 MongoDB 数据库。

脚本还可以增加提取信息和保存信息的部分,修改代码如下所示:

import jsonimport pymongofrom mitmproxy import ctx client = pymongo.MongoClient('localhost')db = client['igetget']collection = db['books'] def response(flow): global collection url = '***/v3/discover/bookList' if flow.request.url.startswith(url): text = flow.response.text data = json.loads(text) books = data.get('c').get('list') for book in books: data = {'title': book.get('operating_title'), 'cover': book.get('cover'), 'summary': book.get('other_share_summary'), 'price': book.get('price') } ctx.log.info(str(data)) collection.insert(data)

重新滑动页面,控制台便会输出信息,如图所示。

python爬取“得到”App 电子书信息

现在输出的每一条内容都是经过提取之后的内容,包含了电子书的标题、封面、描述、价格信息。

最开始我们声明了 MongoDB 的数据库连接,提取出信息之后调用该对象的 insert() 方法将数据插入到数据库即可。

滑动几页,发现所有图书信息都被保存到 MongoDB 中,如图所示。

python爬取“得到”App 电子书信息

目前为止,我们利用一个非常简单的脚本把 “得到” App 的电子书信息保存下来。

代码部分

import jsonimport pymongofrom mitmproxy import ctxclient = pymongo.MongoClient('localhost')db = client['igetget']collection = db['books']def response(flow): global collection url = '***/v3/discover/bookList' if flow.request.url.startswith(url): text = flow.response.text data = json.loads(text) books = data.get('c').get('list') for book in books: data = { 'title': book.get('operating_title'), 'cover': book.get('cover'), 'summary': book.get('other_share_summary'), 'price': book.get('price') } ctx.log.info(str(data)) collection.insert(data)

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com

(0)
上一篇 2023年 5月 1日 下午3:32
下一篇 2023年 5月 1日 下午3:38

相关推荐

  • 聊城身份信息填报

    山东省阳谷县人民法院 (公示失信被执行人名单) 下列被执行人因未履行生效法律文书确定的义务,本院依据《中华人民共和国民事诉讼法》第二百五十五条、《最高人民法院关于公布失信被执行人名…

    2023年 6月 6日
  • 中国高等学历认证报告如何申请(学历认证网上申请平台)

    眨眼间五月已经过去1/3了,今年很多地方的职称评审也是如火如荼地开展,江苏地区也不例外,有些地区的申报已经开始了 在线下报送时,需要申报人提供一定的材料。关于学历,有些地区是需要提…

    2023年 2月 22日
  • 电信诈骗除了报警还能到哪儿投诉

    事主孙先生在短视频软件上认识了一名女子,几番接触后,对方给孙先生的感觉不错,两人就互相添加了QQ继续聊天,随着时间的深入,孙先生对对方的好感上升,信任度也很高,觉得对方是个不错的网…

    互联网 2023年 3月 20日
  • 微信上线打车功能怎么关闭(微信打车怎么预约)

    果粉之家,专业苹果手机技术研究十年!您身边的苹果专家~ ​随着微信的不断发展更新,所涵盖的功能也越来越多,如今基本覆盖到了我们日常工作和生活的方方面面。 除了移动支付和健康码这些日…

    2023年 4月 29日
  • 网易我的世界手机版怎么联机

    我的世界中国版联机方法详解 中国版怎么联机?网易代理了我的世界中国版,这款经典的游戏以开放沙盒玩法拥有无数拥趸,那么国服怎么联机玩呢?接下来6399小编就为各位带来我的世界中国版联…

    2023年 9月 13日
  • 淘宝新手发布宝贝流程

    作为新手卖家刚进入淘宝,肯定会面临上架商品,但是商品上架也是一门学问,只有把商品在上架时各方面都优化好了,在流量进来时能产生转化率,是作为淘宝卖家修炼内容的第一步。 商品上架时有几…

    2023年 1月 9日
  • 怎么解决win10键盘延迟,笔记本外接键盘延迟怎么解决

    我相信许多用户在使用带有Win10系统的计算机时会遇到键盘延迟的问题,尤其是当打游戏的时候遇到这样的麻烦会让人感觉十分的烦躁,下面教大家如何解决这个问题。 步骤: 1、单击“控制面…

    2023年 10月 8日
  • 网站被攻击了怎么办,网站被攻击怎么报警

    如果你的网站遭到攻击,可以尝试以下方法: 立即备份网站数据:在任何处理之前,立即备份你的网站数据,以防止数据损失。 确认攻击类型:确认攻击类型有助于你采取正确的防御措施。常见的攻击…

    2023年 7月 27日
  • 5g和千兆宽带技术区别(5g对比4gplus)

    随着手机更新迭代, 越来越多的人开始用5G手机啦! 但用5G手机却没有打开5G开关, 那用的仍旧是4G网络哦~ 目前,市面上还有一些对于5G网络的误区, 我们精挑了三个, 来为大家…

    2023年 8月 30日
  • 快手里的作品可以发布到头条吗知乎

    上个月我被扣了40分,到了临界点,再扣就没有原创权益了。平台通知上说我四个视频有水印。怎么会呢?我想了想,原来这四个视频有些素材是从快手提取的,可我也有些视频的素材是从抖音提取的,…

    互联网 2022年 12月 28日