5条回答 默认 最新
檀越@新空间 2025-06-04 14:03关注下午好🌅🌅🌅
本答案参考通义千问好的!以下是一个完整的Python爬虫代码框架,可以满足你的需求。这个框架包括以下几个部分:
- 爬取数据:从考研帮网站抓取指定学校的复试分数线、专业、招生人数等信息。
- 数据清洗与存储:将爬取的数据清洗后存储到本地数据库或文件中。
- 数据分析:对数据进行统计分析,例如计算分数线的变化趋势、专业分布等。
- 可视化:使用Matplotlib或Seaborn库对数据进行可视化展示。
代码框架
1. 爬取数据
首先需要安装必要的库:
pip install requests beautifulsoup4 pandas matplotlib seaborn pymysql以下是爬虫代码:
import requests from bs4 import BeautifulSoup import pandas as pd import re import time # 定义目标学校和年份 schools = ['清华大学', '北京大学', '浙江大学'] years = [2023, 2024, 2025] def fetch_data(school, year): url = f"https://www.kaoyanbang.com/school/{school.lower().replace(' ', '')}/{year}/" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } try: response = requests.get(url, headers=headers) response.raise_for_status() soup = BeautifulSoup(response.text, 'html.parser') # 解析数据 data = { '学校': school, '年份': year, '专业': [], '分数线': [], '招生人数': [], '考研人数': [] } # 示例:假设页面结构如下 # <div class="major-info"> # <h3>专业名称</h3> # <p>分数线: XXX</p> # <p>招生人数: XXX</p> # <p>考研人数: XXX</p> # </div> major_info = soup.find_all('div', class_='major-info') for info in major_info: major_name = info.find('h3').get_text(strip=True) line = int(re.search(r'分数线: (\d+)', info.get_text()).group(1)) enrollment = int(re.search(r'招生人数: (\d+)', info.get_text()).group(1)) exam_count = int(re.search(r'考研人数: (\d+)', info.get_text()).group(1)) data['专业'].append(major_name) data['分数线'].append(line) data['招生人数'].append(enrollment) data['考研人数'].append(exam_count) return data except Exception as e: print(f"Error fetching data for {school} in {year}: {e}") return None def main(): all_data = [] for school in schools: for year in years: data = fetch_data(school, year) if data: all_data.append(data) time.sleep(2) # 防止频繁请求被封禁 # 将数据保存为DataFrame df = pd.DataFrame(all_data) df.to_csv("re录取线_data.csv", index=False) print("Data saved to CSV file.") if __name__ == "__main__": main()
2. 数据清洗与存储
上述代码已经将数据保存为CSV文件。如果需要进一步处理,可以使用Pandas进行数据清洗和存储。
3. 数据分析
以下是对数据的统计分析功能:
import pandas as pd def analyze_data(): # 读取CSV文件 df = pd.read_csv("re录取线_data.csv") # 统计每个学校每年的平均分数线 avg_scores = df.groupby(['学校', '年份'])['分数线'].mean().reset_index() print("Average Scores per School and Year:") print(avg_scores) # 计算分数线变化趋势 score_trends = df.groupby(['学校', '年份'])['分数线'].mean().unstack() print("\nScore Trends by School:") print(score_trends) # 统计专业分布 major_distribution = df['专业'].value_counts() print("\nMajor Distribution:") print(major_distribution) if __name__ == "__main__": analyze_data()
4. 可视化
使用Matplotlib和Seaborn库进行数据可视化:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns def visualize_data(): # 读取CSV文件 df = pd.read_csv("re录取线_data.csv") # 绘制分数线趋势图 plt.figure(figsize=(10, 6)) sns.lineplot(data=df, x='年份', y='分数线', hue='学校') plt.title("分数线变化趋势") plt.xlabel("年份") plt.ylabel("分数线") plt.show() if __name__ == "__main__": visualize_data()
总结
以上代码实现了以下功能:
- 爬取数据:从考研帮网站抓取指定学校的复试分数线、专业、招生人数等信息。
- 数据清洗与存储:将爬取的数据保存为CSV文件。
- 数据分析:计算分数线变化趋势、专业分布等。
- 可视化:使用Matplotlib和Seaborn绘制分数线变化趋势图。
你可以根据具体需求进一步优化和扩展代码。如果有任何问题或需要进一步帮助,请随时告诉我!
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报