python爬蟲——汽車之家數據


相信很多買車的朋友,首先會在網上查資料,對比車型價格等,首選就是“汽車之家”,於是,今天我就給大家扒一扒汽車之家的數據:

一、汽車價格:

首先獲取的數據是各款汽車名稱、價格范圍以及最低指導價:

    def get_oa_price(self): try: oa_price_data_list=[] for page in range(1,27): oa_price_api = f"https://price.16888.com/gz/search-0-0-0-0-0-0-0-0-0-1-0-0-0-0-{page}.html" response = self.sc.get_html(oa_price_api) if not response: print('城市頁請求失敗') return 0 #燃油車數據塊 oa_data_= re.findall(r'<div class="style-box ">\s+<ul class="clearfix">([\s\S]*?)</ul>',response.text)[0] #燃油車id和名字列表 car_id_name_list = re.findall(r'data-sid="(\d+)" data-name="(.*?)">',oa_data_) # 價格范圍列表 price_range_list = re.findall(fr'<p>(.*?)\s+<span class="', response.text) if len(car_id_name_list)==len(price_range_list): for index,car_list in enumerate(car_id_name_list): car_id,car_name = car_list #價格范圍 price_range = price_range_list[index] #最低價 price_min = int(eval(price_range.split('-')[0])*10000) oa_price_data_list.append((int(car_id),car_name,price_range,price_min)) # print(price_min) if not oa_price_data_list or not len(oa_price_data_list): return 0 print(oa_price_data_list) print("燃油車價格已經爬取完成") return 1 except: self.sc.collect_error()

結果輸出如下:

二、汽車銷量:

一般買東西,尤其網上買東西,一看價格,二看銷量。銷量好不好有時候也會決定買不買:

    def get_ea_sale(self): try: ea_sale_data_list = [] for year in range(2018,2021): for month in range(1, 13): if month>9: date_ = str(year) + str(month) else: date_ = str(year) + "0" + str(month) for i in range(1,3): ea_sale_api = f"https://xl.16888.com/ev-{date_}-{date_}-{i}.html" print(ea_sale_api) response = self.sc.get_html(ea_sale_api) if not response: print('城市頁請求失敗') return 0 re_no = re.findall(r'<p>暫時沒有 <em>電動車</em>&nbsp;<em>\d+.\d+</em>&nbsp;的銷量數據</p>',response.text) if re_no and len(re_no): print("沒第二頁") break # 銷量數據塊 ea_sale_data_ = re.findall(r'<th width="\w+">車型相關</th>([\s\S]*?)<div class="xl-data-pageing lbBox">', response.text)[0] # 燃油車id和名字列表 car_id_name_list = re.findall(r'<td class="xl-td-\w+"><a href="/s/(\d+)/" target="_blank">(.*?)</a></td>', ea_sale_data_) # 銷量列表 sale_list = re.findall(r'<td class="xl-td-t3">(\d+)</td>', ea_sale_data_) if len(car_id_name_list) == len(sale_list): for index, car_list in enumerate(car_id_name_list): car_id, car_name = car_list # 價格范圍 sale_num = int(sale_list[index]) ea_sale_data_list.append((int(car_id), car_name, sale_num,date_)) #沒有列表數據 if not ea_sale_data_list or not len(ea_sale_data_list): return 0 print(ea_sale_data_list) print("電動車銷量已經爬取完成") return 1 except: self.sc.collect_error()

結果輸出如下:

三、汽車評論:

俗話說:買東西看三寶,一看價格,二看銷量,三看評論。

    def car_comment(self): try: ea_com_api = f"https://k.autohome.com.cn/ajax/getSceneSelectCar?minprice=2&maxprice=110&_appid=koubei&fueltype=4" response = self.sc.get_html(ea_com_api) if not response: print('車型列表請求失敗') return 0 ea_com_json=json.loads(response.text) # print(ea_com_json) result_list = ea_com_json['result'] for result in result_list: ea_com_data_list = [] car_id = int(result['SeriesId']) car_name = result['SeriesName'] print(car_name) com_api = f"https://k.autohome.com.cn/{car_id}/index_1.html" com_resp = self.sc.get_html(com_api) if not com_resp: print('口碑列表請求失敗') continue #查看口碑的條數 com_num_list = re.findall(r'<span class="fn-right \w+">共有(\d+)條口碑</span>',com_resp.text) if not com_num_list or not len(com_num_list): print("沒有口碑") api_ip = 'http://ip.dobel.cn/switch-ip' api_ip_resp = self.sc.get_html(api_ip) time.sleep(1) com_api = f"https://k.autohome.com.cn/{car_id}/index_1.html" com_resp = self.sc.get_html(com_api) if not com_resp: print('口碑列表請求失敗=========') continue # 查看口碑的條數 com_num_list = re.findall(r'<span class="fn-right \w+">共有(\d+)條口碑</span>', com_resp.text) if not com_num_list or not len(com_num_list): print("沒有口碑=========") continue com_num = int(com_num_list[0]) if com_num>15: #翻頁 page_num_list = re.findall(r"<span class='page-item-info'>共(\d+)頁</span>",com_resp.text) if not page_num_list or not len(page_num_list): print("沒有口碑") page_num = 1 else: page_num = int(page_num_list[0]) else: page_num = 1 for page in range(1,page_num+1): com_api2 = f"https://k.autohome.com.cn/{car_id}/index_{page}.html" print(com_api2) com_resp2 = self.sc.get_html(com_api2) if not com_resp2: print('口碑列表2請求失敗') api_ip = 'http://ip.dobel.cn/switch-ip' api_ip_resp = self.sc.get_html(api_ip) time.sleep(1) com_resp2 = self.sc.get_html(com_api2) if not com_resp2: print('口碑列表3請求失敗') continue #評論id和評論鏈接 com_id_url_list = re.findall(r'發表了口碑\s+<a href="(.*?)"',com_resp2.text) if not com_id_url_list or not len(com_id_url_list): print("沒有口碑id") api_ip = 'http://ip.dobel.cn/switch-ip' api_ip_resp = self.sc.get_html(api_ip) time.sleep(1) com_resp3 = self.sc.get_html(com_api2) if not com_resp3: print('口碑列表3請求失敗========') continue # 評論id和評論鏈接 com_id_url_list = re.findall(r'發表了口碑\s+<a href="(.*?)"', com_resp3.text) if not com_id_url_list or not len(com_id_url_list): print("沒有口碑id======") continue for com_id_url in com_id_url_list: com_url = com_id_url #以時間戳作為評論id com_id = str(uuid.uuid4()) ea_com_data_list.append((car_id,car_name,com_id,com_url)) # 沒有列表數據 if not ea_com_data_list or not len(ea_com_data_list): return 0 print(f"汽車之家{car_name}評論id已經爬取完成") return 1 except: self.sc.collect_error()

以上就是我的分享,如果有什么不足之處請指出,多交流,謝謝!

如果喜歡,請關注我的博客:https://www.cnblogs.com/qiuwuzhidi/

想獲取更多數據或定制爬蟲的請點擊python爬蟲專業定制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM