阅读 262

爬虫系列:去应用商量爬取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


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐