爬虫系列:去应用商量爬取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,不需要创建那么多。
道友,是否还有其他解决方案,一起来探讨一下。
作者:职说测试
链接:https://juejin.cn/post/7019236028082815012