Mitmdump手机端爬取京东商品详情

最近笔者在学习移动端App爬虫,目前看来是京东比较好爬的,有些APP不给过验代理证书,今天就写一篇文章进行一下总结

windows上无法使用mitmproxy,我们用mitmdump,mitmdump的强大之处就在于他能执行python文件,接下来我们就编写一个python脚本来抓取京东的商品评论

首先我们来分析一下商品评论是在京东的哪个接口上
这里我们使用charles抓包工具,设置好代理后我们进行抓包
我们点开一个商品详情页的评论
然后一直往下滑不断刷新
观察charles的接口哪个一直在闪
在这里插入图片描述
我们推测是http://api.m.jd.com这里是它商品评论的放置地方
我们再点击进去查看具体情况
在这里插入图片描述
在这里我们找到了一个,右边评论是以json格式存储的
所以我们可以初步确定下来
我们要抓取的url是:‘http://api.m.jd.com/client.action

然后继续看
它的评论首先是放在commentInfo里的commentData
但有些评论并没有,所以我们要有一定的措施来应对这种情况
同时我们抓取一下日期,观察上图发现是放在commentInfo里的commentDate

至此我们大致思路已经清晰了,首先请求url,再抓取commentInfo的commentData和commentDate,由于mitmdump是运行在命令行上的,上面信息繁杂很难看见结果,所以我们将评论和时间一起存到一个mongodb数据库里

下面是我们的全部代码

import json
import pymongo

def response(flow):
    """mongodb的定义不能写在方法外面,一定要写在def里面,否则会报错"""
	
    # 定义数据库
    client = pymongo.MongoClient('localhost', port=27017)
    db = client['jd_data']
    collection_comment = db['comment']

    # url是我们获取商品评论的接口
    url = 'http://api.m.jd.com/client.action'
    if url in flow.request.url:
        text = flow.response.text
        data = json.loads(text)
        """从data提取commentInfoList"""
        comments = data.get('commentInfoList')

        for comment in comments or []:
            # 加空列表是防止因为无评论信息而报错
            if comment.get('commentInfo') and comment.get('commentInfo').get('commentData'):
                info = comment.get('commentInfo')
                commentdata = info.get('commentData')
                date = info.get('commentDate')
                print(commentdata)
                
                # 在数据库里插入评论和日期
                collection_comment.insert({
                    'commentdata':commentdata,
                    'commentdate':date
                })

接下来我们看下结果
这是在powershell里的结果,因为我们编写的时候print了评论
在这里插入图片描述
下面是我们存储在MongoDb的结果
这里我用的是mongodb官方的可视化管理Mongo Compass
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44106928/article/details/89969323