Python 爬蟲之某殼公寓投訴分析

一、數(shù)據(jù)抓取
import requests,timeimport pandas as pdimport numpy as nprequests.packages.urllib3.disable_warnings() # 屏蔽https請求證書驗證警告from fake_useragent import UserAgent # 生成隨機請求頭# uid請求數(shù)據(jù),數(shù)據(jù)格式較為規(guī)范,方便處理def request_data_uid(req_s,couid,page,total_page):params = {'couid': couid, # 商家ID'type': '1','page_size': page * 10, # 每頁10條'page': page, # 第幾頁# 'callback':'jQuery11',}print(f"正在爬取第{page}頁,共計{total_page}頁,剩余{total_page-page}頁")url = 'https://tousu.sina.com.cn/api/company/received_complaints'# 偽造隨機請求頭header={'user-agent':UserAgent().random}res=req_s.get(url,headers=header,params=params, verify=False)# res = requests.get(url, params=params, verify=False)info_list = res.json()['result']['data']['complaints']result =[]for info in info_list:_data = info['main']# 投訴日期timestamp =float(_data['timestamp'])date = time.strftime("%Y-%m-%d",time.localtime(timestamp))# sn:投訴編號 title :投訴問題 appeal:投訴訴求 summary :問題說明data = [date,_data['sn'],_data['title'],_data['appeal'],_data['summary']]result.append(data)pd_result = pd.DataFrame(result,columns=["投訴日期","投訴編號","投訴問題","投訴訴求","詳細說明"])return pd_result# keywords請求數(shù)據(jù),數(shù)據(jù)格式相對混亂# 某梧桐這種沒有收錄商家ID的公司只能用keywords進行檢索處理# 某殼公寓有uid的這種也可以使用keywods進行數(shù)據(jù)請求def request_data_keywords(req_s,keyword,page,total_page):# page =1params = {'keywords':keyword, # 檢索關(guān)鍵詞'type': '1','page_size': page * 10, # 每頁10條'page': page, # 第幾頁# 'callback':'jQuery11',}print(f"正在爬取第{page}頁,共計{total_page}頁,剩余{total_page-page}頁")# url = 'https://tousu.sina.com.cn/api/company/received_complaints'url ='https://tousu.sina.com.cn/api/index/s?'# 偽造隨機請求頭header={'user-agent':UserAgent().random}res=req_s.get(url,headers=header,params=params, verify=False)# res = requests.get(url, params=params, verify=False)info_list = res.json()['result']['data']['lists']result =[]for info in info_list:_data = info['main']# 投訴日期timestamp =float(_data['timestamp'])date = time.strftime("%Y-%m-%d",time.localtime(timestamp))# sn:投訴編號 title :投訴問題 appeal:投訴訴求 summary :問題說明data = [date,_data['sn'],_data['title'],_data['appeal'],_data['summary']]result.append(data)pd_result = pd.DataFrame(result,columns=["投訴日期","投訴編號","投訴問題","投訴訴求","詳細說明"])return pd_result#生成并保持請求會話req_s = requests.Session()# 某殼公寓result = pd.DataFrame()total_page = 2507for page in range(1,total_page+1):data = request_data_uid(req_s,'5350527288',page,total_page)result = result.append(data)result['投訴對象']="某殼公寓"result.to_csv("某殼公寓投訴數(shù)據(jù).csv",index=False)# 某梧桐 關(guān)鍵詞檢索# 某殼公寓為品牌名,工商注冊名稱為某梧桐資產(chǎn)管理有限公司result = pd.DataFrame()total_page = 56for page in range(1,total_page+1):data = request_data_keywords(req_s,'某梧桐',page,total_page)result = result.append(data)result['投訴對象']="某梧桐"result.to_csv("某梧桐投訴數(shù)據(jù).csv",index=False)

二、清洗繪圖
import os,reimport pandas as pdimport numpy as np# 數(shù)據(jù)清洗,處理keywords爬取導(dǎo)致的投訴標題混亂data_path = os.path.join('data','某梧桐投訴數(shù)據(jù).csv')data =pd.read_csv(data_path)pattern=r'[^\u4e00-\u9fa5\d]'data['投訴問題']=data['投訴問題'].apply(lambda x: re.sub(pattern,'',x))data.to_csv(data_path,index=False,encoding="utf_8_sig")# 數(shù)據(jù)合并result = pd.DataFrame()for wj in os.listdir('data'):data_path = os.path.join('data',wj)data =pd.read_csv(data_path)result = result.append(data)result.to_csv("data/合并后某殼投訴數(shù)據(jù).csv",index=False,encoding="utf_8_sig")
# 讀取數(shù)據(jù)data = pd.read_csv("data/合并后某殼投訴數(shù)據(jù).csv")# 篩選到截止昨天的數(shù)據(jù),保證按天數(shù)據(jù)的完整性data = data[data.投訴日期<='2020-11-09']print(f"截至2020-11-09之前,黑貓投訴累計收到某殼公寓相關(guān)投訴共計 {len(data)} 條")
# 時間分布處理_data=data.groupby('投訴日期').count().reset_index()[['投訴日期','投訴編號']]_data.rename(columns={"投訴編號":"投訴數(shù)量"},inplace = True)# 2020-01-30之前投訴數(shù)量求和num1 = _data[_data.投訴日期<='2020-01-30'].投訴數(shù)量.sum()data0 =pd.DataFrame([['2020-01-30之前',num1]],columns=['投訴日期','投訴數(shù)量'])# 2020-02-01 ~ 2020-02-21號之間投訴情況分布data1=_data[(_data.投訴日期>='2020-02-01')&(_data.投訴日期<='2020-02-21')]# 2020-02-21 ~ 2020-11-05num2 = _data[(_data.投訴日期>='2020-02-21')&(_data.投訴日期<='2020-11-05')].投訴數(shù)量.sum()# 2020-11-06 ~ 2020-11-09 本數(shù)據(jù)只采集到2020-11-09print(f"2020-11-06當天投訴量{_data[_data.投訴日期=='2020-11-06'].iloc[0,1]}條")data2=_data[(_data.投訴日期>'2020-11-06')&(_data.投訴日期<='2020-11-09')]data3=pd.DataFrame([['2020-02-21 ~ 2020-11-05',num2]],columns=['投訴日期','投訴數(shù)量'])new_data = pd.concat([data0,data1,data3,data2])
'''配置繪圖參數(shù)'''import matplotlib.pyplot as plt%matplotlib inlineplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['font.size']=18plt.rcParams['figure.figsize']=(12,8)plt.style.use("ggplot")new_data.set_index('投訴日期').plot(kind='bar') # 剔除了2020-11-06的數(shù)據(jù),24093條
2020-01-30之前屬于正常投訴量,偶爾一兩單,2月份因為疫情原因,導(dǎo)致投訴量大量增長,可能是因為疫情原因無法保潔,疫情租房補貼之類的,還有被長租公寓暴雷以及某殼破產(chǎn)之類的負面新聞給帶起來的租戶緊張等等。
2020-02-21之后一直到2020-11-05號投訴量很正常,相比較2020-01-30之前略多,仍在正常經(jīng)營可接受范圍內(nèi)。

2020-11-06突然驟增了2萬4千多條投訴,異常值影響展示,單獨剔除出去了,特地去查了一下新聞,看看有沒有什么大事兒發(fā)生,結(jié)果還真有,據(jù)36氪報道 2020-11-06某殼公寓關(guān)聯(lián)公司稱被執(zhí)行人,執(zhí)行標的超519萬元。

自此之后的7、8、9某殼在黑貓的投訴每天維持在2-300的日增,看來某殼破產(chǎn)的官方辟謠都是扯淡了,也許并不是謠言,也許網(wǎng)傳某殼再現(xiàn)ofo排隊討債并非空穴來風。
以上還是僅僅從黑貓上獲取到的投訴數(shù)據(jù),投訴無門以及自認倒霉的的用戶量又會有多大呢?
接下來就看一下,投訴用戶主要投訴的是什么?主要訴求是什么?
三、詞云生成
import jieba# 分詞模塊import reimport collectionsimport PIL.Image as img# pip install PILfrom wordcloud import WordCloudimport PIL.Image as img# pip install PILfrom wordcloud import WordCloud# 投訴詳細說明合并后進行分詞all_word=''for line in data.values:word = line[4]all_word = all_word+word# jieba分詞result=list(jieba.cut(all_word))# 投訴問題詞云圖wordcloud=WordCloud(width=800,height=600,background_color='white',font_path='C:\\Windows\\Fonts\\msyh.ttc',# 如果存在中文字符需要加載解析的詞典max_font_size=500,min_font_size=20).generate(' '.join(result))image=wordcloud.to_image()# image.show()# 生成圖片展示wordcloud.to_file('某殼公寓投訴詳情.png')# 在本地生成文件展示# 投訴標題合并后進行分詞all_word=''for line in data.values:word = line[2]all_word = all_word+word# jieba分詞result=list(jieba.cut(all_word))# 生成詞云圖# 投訴問題詞云圖wordcloud=WordCloud(width=800,height=600,background_color='white',font_path='C:\\Windows\\Fonts\\msyh.ttc',# 如果存在中文字符需要加載解析的詞典max_font_size=500,min_font_size=20).generate(' '.join(result))image=wordcloud.to_image()# image.show()# 生成圖片展示wordcloud.to_file('某殼公寓投訴問題.png')# 在本地生成文件展示# 投訴訴求合并后進行分詞all_word=''for line in data.values:word = line[3]all_word = all_word+word# jieba分詞result=list(jieba.cut(all_word))# 生成詞云圖# 投訴問題詞云圖wordcloud=WordCloud(width=800,height=600,background_color='white',font_path='C:\\Windows\\Fonts\\msyh.ttc',# 如果存在中文字符需要加載解析的詞典max_font_size=500,min_font_size=20).generate(' '.join(result))image=wordcloud.to_image()# image.show()# 生成圖片展示wordcloud.to_file('某殼公寓投訴訴求.png')# 在本地生成文件展示
某殼公寓投訴詳情 詞云圖
投訴詳情可以看出來,主要投訴問題:提現(xiàn),活動返現(xiàn)(每個月返多少錢,我的除了剛開始兩個月正常返現(xiàn),后面也沒按時打款,客服打不通后面就沒怎么關(guān)注了),主要還有客服聯(lián)系不上,保潔問題等!也許好好直面問題,投訴可能也沒那么多。

某殼公寓投訴訴求 詞云圖
投訴用戶的主要訴求大家強烈要求對某殼公寓做出相應(yīng)處罰并要求退款和賠償。


原文鏈接:https://blog.csdn.net/qq_35866846/article/details/109601322
文章轉(zhuǎn)載:Python之禪
(版權(quán)歸原作者所有,侵刪)
![]()

點擊下方“閱讀原文”查看更多
