分析可能存在的失效时,我们强调要基于功能分析失效,每种功能可以思考七种类别失效模式,从而考虑比较全面。
这背后其实是对可靠性概念的理解,可靠性的定义:产品在规定的条件下和规定的时间内,完成规定功能的能力称为可靠性。
从概念出发,只有明确了功能是什么,才能谈失效是什么。
但很多时候,在各类约束下(如时间、成本等),人们普遍不愿意考虑这么多,只想总结历史经验、市场数据,把主要问题解决。这就需要一些数据支撑。
今年我换了个产品品类,搞咖啡机。以前没怎么接触过这个品类,因此我之前规划了一个事项是品类品质调研,其中一个途径是从网上搜集差评进行分析。有一些评论采集工具可以选择使用,但尝试之后,都觉得不尽人意,还是自己写爬虫更快。
相对来说我比较认可京东一些,至少买这么多次东西,即使给差评也没人联系我删除。所以写了个爬虫,从京东抓数据。程序比较通用,只需要把商品编号列入代码中的skulist里,就可以抓取了。
运行效果:
附参考代码:
-
- #咖啡机京东电商差评抓取
- #王永平 2023.9.24
- import requests
- import json
- import time
- import openpyxl
- #模拟浏览器发送请求并获取响应结果
- import random
- #https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&myproductId=100006896226&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1
- headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36'
- }
-
- #评论的页面
- mp = 0
-
- #需要抓的商品编码,这些编码的获得可以另外通过爬虫获取,看自己的需求
- skulist = [
- '100047982367',
- '100059397465',
- '4245271',
- '14990496145',
- '48402170942',
- ]
-
- def get_comments(myproductId,page):
- #score=0:全部评论,score=1:差评,score=2:中评,score=3:好评
- url='https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId='+myproductId+'&score=1&sortType=5&page='+str(mp)+'&pageSize=10&isShadowSku=0&fold=1'.format(myproductId,page) # 商品id
- resp=requests.get(url,headers=headers)
- s1=resp.text.replace('fetchJSON_comment98(','')
- s=s1.replace(');','')
- #将str类型的数据转成json格式的数据
- res=json.loads(s)
- return res
-
- def get_max_page(myproductId):
- dic_data=get_comments(myproductId,0) #向服务器发送请求,获取字典数据
- return dic_data['maxPage']
-
- def get_info(myproductId):
- global mp
- lst=[] #用于存储提取到的商品数据
- for page in range(0,get_max_page(myproductId)): #循环执行次数,商品的最大评论页数为get_max_page(myproductId)
- #获取每页的商品评论
- print("当前评论页面:"+str(page))
- mp=page
- comments=get_comments(myproductId,page)
- comm_lst=comments['comments']
- #遍历评论
- for item in comm_lst:
- content=item['content'] #评论内容
- print("差评+1:"+content)
- lst.append([content])
- time.sleep(3) #延迟时间,防止程序执行速度过快被封IP
- save(lst)
-
- def save(lst):
- #加载文件
- wk = openpyxl.load_workbook('coffee.xlsx')
- #获取活动工作表
- sheet=wk.active
- sheet.append(['coffee_sku',myproductId])
- #遍历列表,将列表中的数据添加到工作表中,每条数据在Excel中是一行
- for item in lst:
- sheet.append(item)
- wk.save('coffee.xlsx')
- print("----------分割线------------")
-
- if __name__ == '__main__':
- for i in range(0,len(skulist)):
- myproductId = skulist[i]
- print("当前第"+str(i+1)+"款咖啡机,商品编号:"+myproductId)
- print("----------分割线------------")
- get_info(myproductId)