小组国内汽车销量分析 数据采集+数据处理部分

张开发
2026/4/6 6:50:51 15 分钟阅读

分享文章

小组国内汽车销量分析 数据采集+数据处理部分
表1carimport requests from bs4 import BeautifulSoup import json import pandas as pd import numpy as np #目标网页的 URL url https://price.pcauto.com.cn/top/sales/s1-t1.html #请求头 headers { user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36 Edg/145.0.0.0 } # 发送请求 response requests.get(url, headersheaders) html response.text # 使用 BeautifulSoup 解析 HTML soup BeautifulSoup(html, html.parser) # 创建一个空的列表来存储汽车数据 car_data [] # 查找所有包含汽车数据的表格行(tr标签) rows soup.find_all(tr) for row in rows: car_info {} try: car_info[carrank] row.find(td, class_col1).text.strip() # 排名 car_info[name] row.find(td, class_col2).text.strip() # 车名 car_info[price] row.find(td, class_col3).text.strip() # 价格 car_info[sales_num] row.find(td, class_col5).text.strip() # 销售量 car_info[sales_sum] row.find(td, class_col6).text.strip() # 销售总数 # 如果成功获取到数据将其加入到列表中 if car_info: car_data.append(car_info) except AttributeError: # 如果某一行的字段有问题跳过 continue # 将数据写入 JSON 文件 # with open(car2m.json, w, encodingutf-8) as f: # json.dump(car_data, f, ensure_asciiFalse, indent4) # 读取 JSON 文件 df pd.read_json(car2m.json) # 将 DataFrame 写入 CSV 文件 df.to_csv(car2m.csv, indexFalse, sep,, encodingutf-8) print(fCSV 文件已保存)表2suvimport requests from bs4 import BeautifulSoup import json import pandas as pd #目标网页的 URL url https://price.pcauto.com.cn/top/sales/s1-t2.html #请求头 headers { user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0 } # 发送请求 response requests.get(url, headersheaders) html response.text # 使用 BeautifulSoup 解析 HTML soup BeautifulSoup(html, html.parser) # 创建一个空的列表来存储汽车数据 car_data [] # 查找所有包含汽车数据的表格行(tr标签) rows soup.find_all(tr) for row in rows: car_info {} try: car_info[carrank] row.find(td, class_col1).text.strip() # 排名 car_info[name] row.find(td, class_col2).text.strip() # 车名 car_info[price] row.find(td, class_col3).text.strip() # 价格 car_info[sales_num] row.find(td, class_col5).text.strip() # 销售量 car_info[sales_sum] row.find(td, class_col6).text.strip() # 销售总数 # 如果成功获取到数据将其加入到列表中 if car_info: car_data.append(car_info) except AttributeError: # 如果某一行的字段有问题跳过 continue # 将数据写入 JSON 文件 # with open(suv2m.json, w, encodingutf-8) as f: # json.dump(car_data, f, ensure_asciiFalse, indent4) # 读取 JSON 文件 df pd.read_json(suv2m.json) # 将 DataFrame 写入 CSV 文件 df.to_csv(suv2m.csv, indexFalse, sep,, encodingutf-8) print(fCSV 文件已保存)表3mpvimport requests from bs4 import BeautifulSoup import json import pandas as pd #目标网页的 URL url https://price.pcauto.com.cn/top/sales/s1-t3.html #请求头 headers { user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0 } # 发送请求 response requests.get(url, headersheaders) html response.text # 使用 BeautifulSoup 解析 HTML soup BeautifulSoup(html, html.parser) # 创建一个空的列表来存储汽车数据 car_data [] # 查找所有包含汽车数据的表格行(tr标签) rows soup.find_all(tr) for row in rows: car_info {} try: car_info[carrank] row.find(td, class_col1).text.strip() # 排名 car_info[name] row.find(td, class_col2).text.strip() # 车名 car_info[price] row.find(td, class_col3).text.strip() # 价格 car_info[sales_num] row.find(td, class_col5).text.strip() # 销售量 car_info[sales_sum] row.find(td, class_col6).text.strip() # 销售总数 # 如果成功获取到数据将其加入到列表中 if car_info: car_data.append(car_info) except AttributeError: # 如果某一行的字段有问题跳过 continue # 将数据写入 JSON 文件 # with open(mpv2m.json, w, encodingutf-8) as f: # json.dump(car_data, f, ensure_asciiFalse, indent4) # 读取 JSON 文件 df pd.read_json(mpv2m.json) # 将 DataFrame 写入 CSV 文件 df.to_csv(mpv2m.csv, indexFalse, sep,, encodingutf-8) print(fCSV 文件已保存)表4科技import requests from bs4 import BeautifulSoup import json import re import pandas as pd # 目标网页的 URL url https://www.autohome.com.cn/rank/16.html # 请求头模拟浏览器 headers { user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0 } response requests.get(url, headersheaders) response.encoding utf-8 html response.text # 使用 BeautifulSoup 解析 HTML soup BeautifulSoup(html, html.parser) script_tag soup.find(script, id__NEXT_DATA__) if not script_tag: raise Exception(没找到 __NEXT_DATA__) data_json json.loads(script_tag.string) # # ③ 提取数据 # tech_list data_json[props][pageProps][listRes][list] result [] for tech in tech_list: item {} tech_info tech.get(technologyinfo, {}) right_info tech.get(rightinfo, {}) # 科技名称 item[technology_name] tech_info.get(title) # 装配车系提取数字 subtitle tech_info.get(subtitle, ) match_num re.search(r\d, subtitle) item[car_series_count] int(match_num.group()) if match_num else None # 大声指数 loudness right_info.get(righttextone) item[loudness_index] int(loudness) if loudness else None result.append(item) # # ④ 输出 JSON # # with open(car_keji.json, w, encodingutf-8) as f: # json.dump(result, f, ensure_asciiFalse, indent2) # 读取 JSON 文件 df pd.read_json(car_keji.json) # 将 DataFrame 写入 CSV 文件 df.to_csv(car_keji.csv, indexFalse, sep,, encodingutf-8) print(fCSV 文件已保存)表5关注import requests import json import re import pandas as pd from bs4 import BeautifulSoup # # ① 请求网页 # url https://www.autohome.com.cn/rank/2-2001-0-x-x-x-0_9000.html headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 Edg/146.0.0.0, } response requests.get(url, headersheaders) response.encoding utf-8 html response.text # # ② bs4解析HTML # soup BeautifulSoup(html, html.parser) # # ③ 提取 JSON车名/评分/价格 # script_tag soup.find(script, id__NEXT_DATA__) if not script_tag: raise Exception(没找到 __NEXT_DATA__) data_json json.loads(script_tag.string) car_list data_json[props][pageProps][listRes][list] # # ④ 提取“日均关注度”修复版 # attention_list [] for tag in soup.find_all(string日均关注度): parent tag.parent # ✅ 关键找上一个兄弟节点数字 prev parent.find_previous_sibling() if prev: text prev.get_text(stripTrue) else: # 兜底防结构变化 text parent.parent.get_text(stripTrue) match re.search(r\d, text) if match: attention_list.append(int(match.group())) # # ⑤ 合并数据4字段 # result [] for i, car in enumerate(car_list): item {} # 车名 item[name] car.get(seriesname) or car.get(specname) # 评分 item[score] car.get(scorevalue) # 价格 item[price] car.get(priceinfo) # 日均关注度修复后 item[attention_per_day] ( attention_list[i] if i len(attention_list) else None ) result.append(item) # # ⑥ 输出JSON # # with open(cars_like.json, w, encodingutf-8) as f: # json.dump(result, f, ensure_asciiFalse, indent2) # 读取 JSON 文件 df pd.read_json(cars_like.json) # 将 DataFrame 写入 CSV 文件 df.to_csv(car_like.csv, indexFalse, sep,, encodingutf-8) print(fCSV 文件已保存)表6评分import requests from bs4 import BeautifulSoup import json import pandas as pd #目标网页的 URL url https://www.yoojia.com/rank/1-0-0-0-0-0-0.html?city%E5%8C%97%E4%BA%ACpn1rn15sortpraise #请求头 headers { user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36 Edg/145.0.0.0 } # 发送请求 response requests.get(url, headersheaders) html response.text # 使用 BeautifulSoup 解析 HTML soup BeautifulSoup(html, html.parser) # 用来存储最终数据的列表 car_data [] # 寻找所有包含车辆信息的div元素 cars soup.find_all(div, class_ranks-item) # 遍历所有车辆 for car in cars: car_info {} # 获取车名 car_info[name] car.find(span, class_info-name).text.strip() if car.find(span, class_info-name) else N/A # 获取价格范围 car_info[price] car.find(div, class_info-price).text.strip() if car.find(div, class_info-price) else N/A # 获取评分 car_info[score] car.find(div, class_car-rank-num-val).text.strip() if car.find(div, class_car-rank-num-val) else N/A # 获取评价人数并去除非数字部分 reviewers car.find(div, class_car-rank-type).text.strip() if car.find(div, class_car-rank-type) else N/A # 只保留数字 car_info[reviewers] .join(filter(str.isdigit, reviewers)) if reviewers ! N/A else N/A # 将车辆信息添加到列表中 car_data.append(car_info) # 输出JSON文件 # with open(car_pinfen.json, w, encodingutf-8) as json_file: # json.dump(car_data, json_file, ensure_asciiFalse, indent4) # # print(JSON文件已生成/mnt/data/car_rankings_optimized.json) # 读取 JSON 文件 df pd.read_json(car_pinfen.json) # 将 DataFrame 写入 CSV 文件 df.to_csv(car_pingfen.csv, indexFalse, sep,, encodingutf-8) print(fCSV 文件已保存)表7品牌import requests from bs4 import BeautifulSoup import json import pandas as pd #目标网页的 URL url https://www.yoojia.com/rank/1-0-0-0-0-0-0.html?city%E5%8C%97%E4%BA%ACpn1rn15sortbrandSale #请求头 headers { user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36 Edg/145.0.0.0 } # 发送请求 response requests.get(url, headersheaders) html response.text # 使用 BeautifulSoup 解析 HTML soup BeautifulSoup(html, html.parser) # 初始化存储数据的列表 car_data [] # 查找所有包含品牌和销量的元素 ranks_items soup.find_all(div, class_ranks-item) # 遍历每个排名项并提取品牌名称、排名和销量 for idx, item in enumerate(ranks_items, 1): # 使用enumerate来获取排名 car_info {} # 提取品牌名称 brand_name item.find(span, class_info-name) car_info[brand_name] brand_name.text.strip() if brand_name else N/A # 提取车系销量 sales item.find(div, class_car-rank-num-val) car_info[sales] sales.text.strip().replace(辆, ) if sales else N/A # 添加排名 car_info[carrank] idx # 排名从1开始 # 添加到数据列表 car_data.append(car_info) # 将数据保存为 JSON 文件 # with open(car_pinpai.json, w, encodingutf-8) as json_file: # json.dump(car_data, json_file, ensure_asciiFalse, indent4) # # print(JSON file has been created successfully.) # 读取 JSON 文件 df pd.read_json(car_pinpai.json) # 将 DataFrame 写入 CSV 文件 df.to_csv(car_pinpai.csv, indexFalse, sep,, encodingutf-8) print(fCSV 文件已保存)

更多文章