抓取网页生成电子书(mitmdump爬取“得到”App电子书信息(组图))
优采云 发布时间: 2021-09-24 08:16抓取网页生成电子书(mitmdump爬取“得到”App电子书信息(组图))
PS:如果你需要Python学习材料,你可以点击下面的链接自己获取
Mitmdump爬网“获取”应用程序电子书信息
“获取”应用程序是由逻辑思维产生的零碎时间学习应用程序。应用程序中有许多学习资源。但是,“获取”应用程序没有相应的web版本,因此必须通过该应用程序获取信息。这次,我们通过抓取mitmdump的应用程序来练习它的用法
爬升目标
我们的目标是抓取应用程序中电子书部分的电子书信息,并将信息保存到mongodb,如图所示
我们需要把这本书的名字、介绍、封面和价格降下来。但是,此次爬升的重点是了解mitmdump工具的使用,因此暂时不涉及自动爬升。应用程序的操作仍然是手动的。Mitmdump负责捕获响应并提取和保存数据
2.准备
请确保已正确安装mitmproxy和mitmdump。手机和个人电脑在同一个局域网内。同时,配置mitmproxy的CA证书,安装mongodb并运行其服务,安装pymongo库。有关具体配置,请参阅第1章中的说明
3.抓斗分析
首先,浏览URL并返回当前页面的内容。让我们编写一个脚本,如下所示:
1 defresponse(flow):2打印(flow.request.url)3打印(flow.response.text)
这里,只输出请求的URL和响应的主体内容,也就是说,请求链接和响应内容是两个最关键的部分。脚本保存名称为script.py
接下来,运行mitmdump。命令如下:
mitmdump-s script.py
打开“获取”应用的电子书页面,可以在PC控制台上看到相应的输出。然后滑动页面以加载更多电子书。控制台的新输出内容是应用程序发送的新加载请求,包括下一页的电子书内容。控制台输出结果的示例如图所示
您可以看到带有URL的接口,URL后面跟着一个符号参数。通过URL的名称,您可以确定这是获取电子书列表的接口。URL下面的输出是响应内容,它是JSON格式的字符串。我们格式化它,如图所示
格式化内容收录一个C字段和一个列表字段。列表的每个元素都收录价格、标题、描述等。第一个返回的结果是电子书爱好者。此时,应用程序的内容也是电子书。所描述的内容和价格也完全匹配。应用程序页面如图所示
这表明当前接口是获取电子书信息的接口。我们只需要从这个界面获取内容。然后解析返回的结果并将结果保存到数据库中
4.数据捕获
接下来,我们需要过滤接口,获取上面分析的接口,然后在结果中提取相应的字段
在这里,我们修改脚本如下:
1从mitmproxy*敏*感*词*JSON2*敏*感*词*TX3
4 defresponse(flow):5 url='#39
6.ifflow.request.url.startswith(url):7 text=flow.response.text8 data=json.loads(text)9 books=data.get('c')。get('list')10图书目录:11(str(book))
再次滑动电子书页面,观察PC控制台上的输出,如图所示
控制台输出
现在这本书的所有信息都被输出了。图书信息对应于JSON格式的一段数据
5.提取保存
接下来,我们需要提取信息并将其保存到数据库中。为了方便起见,我们选择mongodb数据库
脚本还可以添加提取和保存信息的部分。修改后的代码如下:
1*敏*感*词*JSON2*敏*感*词*PMONGO3来自mitmproxy*敏*感*词*TX4
5 client=pymongo.MongoClient('localhost')6 db=client['igetget']7 采集=db['books']8
9 defresponse(flow):10 global采集11 url='#39
12 ifflow.request.url.startswith(url):13 text=flow.response.text14 data=json.loads(text)15 books=data.get('c').get('list')16图书入库:17 data={'title':book.get('operating_title')、18'cover':book.get('cover')、19'summary':book.get('other_share_summary')、20'price':book.get('price')21}22(str data))采集.insert(data)
再次滑动页面,控制台将输出信息,如图所示
现在每个输出都是提取的内容,包括电子书的标题、封面、描述和价格信息
一开始
,我们声明了MongoDB的数据库连接。提取信息后,我们调用对象的insert()方法将数据插入数据库。p>
滑动几页,发现所有书籍信息都保存在mongodb中,如图所示
到目前为止,我们已经使用了一个非常简单的脚本来保存“get”应用程序的电子书信息
代码部分
1*敏*感*词*JSON2*敏*感*词*PMONGO3来自mitmproxy*敏*感*词*TX45 client=pymongo.MongoClient('localhost')6 db=client['igetget']7 采集=db['books']8910 defresponse(flow):11 global采集12 url='#39
13 ifflow.request.url.startswith(url):14 text=flow.response.text15 data=json.loads(text)16 books=data.get('c').get('list')17图书内置:18 data={19'title':book.get('operating_title'),20'cover':book.get('cover'),21'summary':book.get('other(share)summary'),22'price':book.get('price')23}24(str data))25 采集.insert(data)