爬虫系列:去应用商量爬取app的评价信息

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

几天前,项目组的‘项目经理’,突然找我聊天,大概意思是这样的:希望我可以在任务不紧急的情况下协助运营同事做一点运营的事情,比如搞搞社群、抓取app评价、跟踪注册数据啊等等事情。

测试是不是万能的???

到作者这里就已经不是什么新鲜事了,公司运维兼职了、单元测试也做过了、静态代码分析扫描也做过了、自己的本身的测试技能<各种自动化技术、爬虫等等>,只差自己没开发系统了。

任务和方案

最先安排的任务是社群和评价,其中需要准备加入100个社群潜伏起来,抓取1000条app的评价;

当然是从最简单的做起,不要花费太多精力,害得我先下载了一堆app,然后就是各种抓包???

结果,抓包无效,因为是app store,总之没有解决证书问题,其实已经想到了iOS的app自动化解决方案

  • 内事不决问度娘,不要怕,车到山前必有路。

果然,前人已经有人在抓取app的评论了,当然,我只想找个思路或者解决方案,主要是获取那个地址

  • 解决方案有了,通过应用商城的接口响应数据来抓取评价

接口响应刚好是json对象,python可以利用这点进行提取关键信息

先操作一下,看看页面和接口的特点,然后试着写python脚本来过滤结果
  • 从浏览器F12复制出来的字符串,在python中要变成dict对象,所以先处理一下
def str_dict():
    data = {}
    strs = "method=internal.user.commenList3&serviceType=20&reqPageNum=4&maxResults=25&appid=C101545375&version=10.0.0&zone=&locale=zh"
    ss = strs.split("&")
    for s in ss:
        c = s.split("=")
        a, b = c
        print(a, b)
        data[a] = b
    return data
# 拆分之后的数据
# data = {'method': 'internal.user.commenList3', 'serviceType': '20', 'reqPageNum': '1', 'maxResults': '25', 'appid': 'C104399487', 'version': '10.0.0', 'zone': '', 'locale': 'zh'}
复制代码

其实作者已经写好了完整的代码,只是想再将整个实现过程捋一遍,但是又都在注释里

所以,大家还是勉为其难的看看注释就都明白怎么实现了。

import requests
from utils.handle_excel2 import HandleExcel

# app应用在应用商店的id
appid = "C100381757"

# 评论保存地址
excel = HandleExcel(filename="../datas/评论.xlsx")

# 华为请求地址
url = "https://web-drcn.hispace.dbankcloud.cn/uowap/index"
# 入参,根据appid搜索,每页25条评论
data = {'method': 'internal.user.commenList3', 'serviceType': '20', 'reqPageNum': '1', 'maxResults': '25', 'appid': appid, 'version': '10.0.0', 'zone': '', 'locale': 'zh'}
# 发起请求
res = requests.get(url, params=data, headers={"Content-Type":"application/json"})
# 得到评论总页码
pages = res.json().get("totalPages")


cs = []    # 最长的评论列表;即一个app的所有筛选的评论

for p in range(1, pages + 1):
    # 遍历每页评论
    data = {'method': 'internal.user.commenList3', 'serviceType': '20', 'reqPageNum': p, 'maxResults': '25', 'appid': appid, 'version': '10.0.0', 'zone': '', 'locale': 'zh'}
    res = requests.get(url, params=data, headers={"Content-Type":"application/json"})
    comments = res.json().get("list")
    
    cc = []    # 每页评论列表
    for c in comments:
        star = int(c.get("stars"))    # 好评star
        comment = c.get("commentInfo")
        
        if star >= 4:    # 至少要大于4颗星才收集
            cc.append(comment)    # 每页的评论
    cs.extend(cc)    # 每个app应用的评论

# 获取评论excel的总行数,就不要每爬一个就创建一个excel
max_rows = excel.get_rows()

for i in range(len(cs)):    # 遍历每个app的评论
    # 行数最大行+1+i开始写
    excel.write_result(max_rows + i + 1, 1, cs[i])
excel.save_workbook()    # 最后才保存excel
复制代码

总结

实现过程由简单到完整,大概如下:

  • 先是demo,能请求通过,将评价输出在控制台
  • 然后再过滤条件,star不能小于3
  • 再将结果写入到excel,每个app一个excel
  • 提取关键参数,只需要修改appid,所有的评价都写入一个excel,不需要创建那么多。

道友,是否还有其他解决方案,一起来探讨一下。

猜你喜欢

转载自juejin.im/post/7019236028082815012