5条回答 默认 最新

  • 檀越@新空间 2025-06-04 14:03
    关注

    下午好🌅🌅🌅
    本答案参考通义千问

    好的!以下是一个完整的Python爬虫代码框架,可以满足你的需求。这个框架包括以下几个部分:

    1. 爬取数据:从考研帮网站抓取指定学校的复试分数线、专业、招生人数等信息。
    2. 数据清洗与存储:将爬取的数据清洗后存储到本地数据库或文件中。
    3. 数据分析:对数据进行统计分析,例如计算分数线的变化趋势、专业分布等。
    4. 可视化:使用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()
    

    总结

    以上代码实现了以下功能:

    1. 爬取数据:从考研帮网站抓取指定学校的复试分数线、专业、招生人数等信息。
    2. 数据清洗与存储:将爬取的数据保存为CSV文件。
    3. 数据分析:计算分数线变化趋势、专业分布等。
    4. 可视化:使用Matplotlib和Seaborn绘制分数线变化趋势图。

    你可以根据具体需求进一步优化和扩展代码。如果有任何问题或需要进一步帮助,请随时告诉我!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 6月12日
  • 已采纳回答 6月4日
  • 修改了问题 6月4日
  • 修改了问题 6月4日
  • 展开全部