Python 懂車帝綜合口碑?dāng)?shù)據(jù)
??本文所有教程及源碼、軟件僅為技術(shù)研究。不涉及計(jì)算機(jī)信息系統(tǒng)功能的刪除、修改、增加、干擾,更不會(huì)影響計(jì)算機(jī)信息系統(tǒng)的正常運(yùn)行。不得將代碼用于非法用途,如侵立刪!
Python 懂車帝綜合口碑?dāng)?shù)據(jù)
需求
懂車帝全系車型綜合口碑 優(yōu)點(diǎn) 缺點(diǎn) 統(tǒng)計(jì)數(shù)據(jù)

操作環(huán)境
win10
Google nexus5x(root)
Python3.9
Charles
需求分析
先來web端試下能否找到需要的數(shù)據(jù)接口,隨便找個(gè)車型打開口碑頁面F12查看Network

根據(jù)頁面關(guān)鍵詞搜索沒有找到明顯的數(shù)據(jù)接口,雖然說現(xiàn)在也可以使用request或者selenium直接在頁面解析數(shù)據(jù),但是畢竟這不是首選方案,還是從app分析一下在決定用什么方案。 PS:手機(jī)環(huán)境、抓包環(huán)境的配置在這不在贅述,有興趣的可參考之前的文章 app抓包環(huán)境配置
下載懂車帝app,并安裝至手機(jī)

手機(jī)開啟Postern,pc打開charles
至此抓包工作準(zhǔn)備完成,打開懂車帝app,隨便找個(gè)車型進(jìn)入懂車分頁面

還是老套路先根據(jù)頁面關(guān)鍵詞搜索一波

明顯看出來后兩條數(shù)據(jù)不是需要的,前四條是同一個(gè)接口返回的,應(yīng)該就是需要的數(shù)據(jù),雙擊點(diǎn)進(jìn)去看一下詳細(xì)數(shù)據(jù)

初步查看和頁面數(shù)據(jù)是一致的,看數(shù)據(jù)結(jié)構(gòu)和具體的數(shù)值和頁面中的數(shù)據(jù)很像,Charles界面太小,將數(shù)據(jù)拷貝至網(wǎng)頁中解析,方便分析,分享一個(gè)常用的json數(shù)據(jù)在線解析網(wǎng)站

經(jīng)過仔細(xì)對(duì)比頁面中的數(shù)據(jù),發(fā)現(xiàn)此接口就是我們需要的 綜合口碑接口:
https://*******/get_detail/?series_id=4182&car_id=0&only_owner=0&year_id=all&iid=2467735824764398&device_id=40011211486215&ac=wifi&channel=dcd-yd-11zh-and-74&aid=36&app_name=automobile&version_code=693&version_name=6.9.3&device_platform=android&os=android&ab_client=a1%2Cc2%2Ce1%2Cf2%2Cg2%2Cf7&ab_group=3167590%2C3577236%2C3333988&ssmix=a&device_type=Nexus+5X&device_brand=google&language=zh&os_api=27&os_version=8.1.0&manifest_version_code=693&resolution=1080*1794&dpi=420&update_version_code=6931&_rticket=1648907286543&cdid=f3163204-7faf-45d7-89c4-e82215c3216c&city_name=%E8%81%8A%E5%9F%8E&gps_city_name=%E8%81%8A%E5%9F%8E&selected_city_name&rom_version=27&longi_lati_type=1&longi_lati_time=1648907102913&content_sort_mode=0&total_memory=1.77&cpu_name=Qualcomm+Technologies%2C+Inc+MSM8992&overall_score=4.873&cpu_score=4.8872&host_abi=
對(duì)!你沒看錯(cuò),就是這么長,驗(yàn)證一下數(shù)據(jù)接口,在網(wǎng)頁中直接請(qǐng)求一下這個(gè)url

這兒推薦安裝一個(gè)網(wǎng)頁json可視化的插件,這兒偷懶沒裝,在線解析了一下json數(shù)據(jù),和Charles抓到的數(shù)據(jù)是一樣,經(jīng)過分析得知: series_id是車系id,修改此參數(shù)即可
獲取全部車系id
獲取車系id就很簡單了,先拿到品牌id然后根據(jù)品牌id請(qǐng)求車系信息,注意這是一個(gè)post接口
def get_series(self, brand_id):
? ?"""
? ?獲取品牌所有車系
? ?brand_id:品牌id
? ?"""
? ?headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) appleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36'}
? ?param = {
? ?'offset': 0,
? ?'limit': 1000,
? ?'is_refresh': 1,
? ?'city_name': '北京',
? ?'brand': brand_id
? ?}
? ?response = requests.post(url=url, data=param, headers=headers)
? ?rep_json = json.loads(response.text)
? ?# print(response.text)
? ?if rep_json['status'] == 'success':
? ?return rep_json['data']['series']
? ?else:
? ?raise Exception("get car series has exception!")

獲取車系綜合口碑評(píng)分
? ?def get_score(self, series_id):
? ? ? ?"""
? ? ? ?獲取車系綜合評(píng)分
? ? ? ?series_id: 車系id
? ? ? ?"""
? ? ? ?response = self._parse_url(url).json()
? ? ? ?tag_list = response.get('data').get('tab_info').get('tag_list')
? ? ? ?data = list()
? ? ? ?# 優(yōu)點(diǎn)
? ? ? ?merits = [i.get('tag_name')+"("+str(i.get('count'))+")" for i in tag_list if i.get('sentiment') == 1]
? ? ? ?data.append(merits)
? ? ? ?# 缺點(diǎn)
? ? ? ?defects = [i.get('tag_name')+"("+str(i.get('count'))+")" for i in tag_list if i.get('sentiment') == -1]
? ? ? ?data.append(defects)
? ? ? ?return data
運(yùn)行效果


資源下載
https://download.csdn.net/download/qq_38154948/85073968
本文僅供學(xué)習(xí)交流使用,如侵立刪!