相较于客户行为(点击习惯、访问深度、需求关联等)或者客户属性(年龄段、性别、地区等),客户的正面询问与反馈尤为重要。正面询问的目前大概了解的是2个方向,一是客户来电语音转文本后进行的智能归档,二是人机交互(ASR或在线文本);反馈的方面则是用户的建议、评价或问题等等。
本文进行的是反馈方面的分析。一是正面询问的信息往往是企业内部才有,二是反馈分析也有重要意义。个人见解,对企业,反馈分析可以了解用户关注点;对竞争者,由于正面信息难以拿到,分析对手的用户反馈可以了解对手;对普通购物者,很多时候商品的负面评论很少甚至被掩盖,这时获取其他购买者的反馈并精确定位负面评价可以帮助自己判断(有时候商品虽有很多优点,但存在一些细节可能自身无法接受)。
笔者思路是采集某个天猫商品的评论,根据评价来分析不同规格商品的差异、用户关注点、产品问题等等。
步骤:采集评论——数据处理——数据分析
一、采集评论文本
采集的方法有很多,爬虫(通过评论链接来)、借助采集器(好像八爪鱼)、还有写自动化程序,如用python(selenium、pyautogui)。笔者采用uibot的功能加上自定义插件来采集,提升下效率~
1、uibot自定义插件
uibot支持IE浏览器(其他的还有谷歌和火狐,暂时没试过),插件支持python,自定义的功能放在extend文件夹,然后涉及的python包放在lib\site-packages文件夹。建议是放完插件后重开uibot,因为有时会提示未找着。笔者的自定义功能是查找商品标题(正则表达式)和规范化uibot采集的内容,方便写入excel。
插件代码:
def getallwt():
titles = pygetwindow.getAllTitles()
return titles
def arrtmall(arr):
arr1=[]
arr2=[]
for i in range(len(arr)):
for j in range(3):#len(arr[i])
arr1.append(arr[i][j])
for i in range(0,len(arr1),3):
arr2.append(arr1[i:i+3])
return arr2
def sleeptime(t):
time.sleep(t)
2、采集评论
方式先采集第一页的评论,再用循环采集后续的。
期间遇到的问题和解决方法:
(1)uibot找到“下一页”这个元素后,刚好停留在页面底部,鼠标点击不到。解决方法是先移动到元素,再模拟滚动,再点击。
(2)翻页太快,触发天猫的反爬机制(弹出验证框)。解决方法是延迟进行,笔者设置延迟是5s,未出现验证框。
效果图:采集了99页(好像是最多99?),3个字段分别是评论、细类和购买者(后续如需要可以吧时间也采集下来)
uibot代码:
title=XX//打开的商品链接浏览器标题
kfExcelWorkBook = Excel.OpenExcel("D:\\tmall评论爬取.xlsx",true)
win=getwindow.getwt(title)
TracePrint win
Window.SetActive({"wnd":[{"cls":"IEFrame","title":win,"app":"iexplore"}]})
tmall = UiElement.DataScrap({"html":{"attrMap":{"parentid":"J_Reviews","tag":"TABLE"},"index":0,"tagName":"TABLE"},"wnd":[{"app":"iexplore","cls":"IEFrame","title":win},{"cls":"Internet Explorer_Server"}]},{"Columns":[],"ExtractTable":1},{"objNextLinkElement":"","iMaxNumberOfPage":5,"iMaxNumberOfResult":-1,"iDelayBetweenMS":1000,"bContinueOnError":false})
// TracePrint tmall
arr=arrtmall1.arrtmall(tmall)
// TracePrint arr
rows = Excel.GetRowsCount(kfExcelWorkBook,"Sheet1")
Excel.WriteRange(kfExcelWorkBook,"Sheet1","A"&rows+1,arr,true)
Excel.Save(kfExcelWorkBook)
// 爬取页数
page=100
c=2
Do While c<=page
Window.SetActive({"wnd":[{"cls":"IEFrame","title":win,"app":"iexplore"}]})
Mouse.Hover({"html":[{"aaname":"下一页>>","parentid":"J_Reviews","tag":"A"}],"wnd":[{"app":"iexplore","cls":"IEFrame","title":win},{"cls":"Internet Explorer_Server"}]},10000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200,"bSetForeground":true,"sCursorPosition":"Center","iCursorOffsetX":0,"iCursorOffsetY":0,"sKeyModifiers":[],"sSimulate":"simulate"})
Mouse.Wheel(1,"down", [],{"iDelayAfter":300,"iDelayBefore":200})
Mouse.Action({"html":[{"aaname":"下一页>>","parentid":"J_Reviews","tag":"A"}],"wnd":[{"app":"iexplore","cls":"IEFrame","title":win},{"cls":"Internet Explorer_Server"}]},"left","click",10000,{"bContinueOnError":false,"iDelayAfter":300,"iDelayBefore":200,"bSetForeground":true,"sCursorPosition":"Center","iCursorOffsetX":0,"iCursorOffsetY":0,"sKeyModifiers":[],"sSimulate":"simulate"})
arrtmall1.sleeptime(5)
tmall = UiElement.DataScrap({"html":{"attrMap":{"parentid":"J_Reviews","tag":"TABLE"},"index":0,"tagName":"TABLE"},"wnd":[{"app":"iexplore","cls":"IEFrame","title":win},{"cls":"Internet Explorer_Server"}]},{"Columns":[],"ExtractTable":1},{"objNextLinkElement":"","iMaxNumberOfPage":5,"iMaxNumberOfResult":-1,"iDelayBetweenMS":1000,"bContinueOnError":false})
// TracePrint tmall
arr=arrtmall1.arrtmall(tmall)
// TracePrint arr
rows = Excel.GetRowsCount(kfExcelWorkBook,"Sheet1")
Excel.WriteRange(kfExcelWorkBook,"Sheet1","A"&rows+1,arr,true)
Excel.Save(kfExcelWorkBook)
c=c+1
Loop
后续https://blog.csdn.net/m0_49621298/article/details/107585855