「这是我参与11月更文挑战的第27天,活动详情查看:2021最后一次更文挑战」。
前言
几天前,项目组的‘项目经理’,突然找我聊天,大概意思是这样的:希望我可以在任务不紧急的情况下协助运营同事做一点运营的事情,比如搞搞社群、抓取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,不需要创建那么多。
道友,是否还有其他解决方案,一起来探讨一下。