diff --git a/南昌大学专业录取分数线.py b/南昌大学专业录取分数线.py deleted file mode 100644 index 256463a..0000000 --- a/南昌大学专业录取分数线.py +++ /dev/null @@ -1,157 +0,0 @@ -import requests -from lxml import etree -import pymysql -import re -from bs4 import BeautifulSoup - -# MySQL数据库配置 -db_config = { - 'host': 'localhost', - 'user': 'root', - 'password': '091020', - 'database': 'jdbc', - 'charset': 'utf8mb4', - 'cursorclass': pymysql.cursors.DictCursor #游标类型返回的结果是一个字典列表,其中每个字典都包含一行结果,字典的键是列名 -} - -# 爬取并保存数据到MySQL的函数 -def crawl_and_save(year, url): - datas = [] - response = requests.get(url) - response.raise_for_status() # 检查请求是否成功 - html = etree.HTML(response.text.encode('iso-8859-1').decode('utf-8')) - htmlTxt = response.text.encode('iso-8859-1').decode('utf-8') - - table = html.xpath('//table')[0] - # 提取数据 - if year == 2020: - # 使用XPath提取表格的所有行 - rows = table.xpath('.//tbody/tr') - # 遍历所有行,并提取每行的数据 - for row in rows: - data = { - 'year': year, - 'category': row.xpath('.//td[1]/text()')[0] if row.xpath('.//td[1]') else '', - 'ProDirection': row.xpath('.//td[2]/text()')[0] if row.xpath('.//td[2]') else '', - 'FamCategories': row.xpath('.//td[3]/text()')[0] if row.xpath('.//td[3]') else '', - 'EnrollmentPlan': row.xpath('.//td[4]/text()')[0] if row.xpath('.//td[4]') else '', - 'ControlLine': row.xpath('.//td[5]/text()')[0] if row.xpath('.//td[5]') else '', - 'AdmissionLine': row.xpath('.//td[6]/text()')[0] if row.xpath('.//td[6]') else '', - 'ProAdmissionLine': row.xpath('.//td[7]/text()')[0] if row.xpath('.//td[7]') else '', - 'ReferenceRanking': row.xpath('.//td[8]/text()')[0] if row.xpath('.//td[8]') else '', - } - if data['category'] == '类别': - continue - datas.append(data) - - elif year == 2021: - # 使用BeautifulSoup解析HTML代码 - soup = BeautifulSoup(htmlTxt, 'html.parser') - # 找到包含表格的div元素 - div = soup.find('div', class_='blog-content') - # 找到表格并提取信息 - table = div.find('table') - rows = table.find_all('tr') - for row in rows[2:]: # 跳过表头和标题行 - cells = row.find_all('td') - if len(cells) == 8: # 确保行中有8个单元格 - category, category_type, major, recruitment, control_line, file_line, major_line, rank = cells - data = { - 'year': year, - 'category': category.text, - 'FamCategories': category_type.text, - 'ProDirection': major.text, - 'EnrollmentPlan': recruitment.text, - 'ControlLine': control_line.text, - 'AdmissionLine': file_line.text, - 'ProAdmissionLine': major_line.text, - 'ReferenceRanking': rank.text, - } - datas.append(data) - - elif year == 2022: - # 正则表达式模式 - pattern = re.compile(r'(.*?)') - # 提取信息 - rows = re.findall(r'(.*?)', htmlTxt, flags=re.DOTALL) # 找到所有行 - for row in rows[2:]: # 跳过表头和标题行 - cells = pattern.findall(row) - if len(cells) == 7: - data = { - 'year': year, - 'category': None, - 'FamCategories': cells[0], - 'ProDirection': cells[1], - 'EnrollmentPlan': cells[2], - 'ControlLine': cells[3], - 'AdmissionLine': cells[4], - 'ProAdmissionLine': cells[5], - 'ReferenceRanking': cells[6], - } - datas.append(data) - - elif year == 2023: - # 使用XPath提取表格的所有行 - rows = table.xpath('.//tbody/tr') - # 遍历所有行,并提取每行的数据 - for row in rows: - data = { - 'year': year, - 'category': None, - 'FamCategories': row.xpath('.//td[1]/text()')[0] if row.xpath('.//td[1]') else '', - 'ProDirection': row.xpath('.//td[2]/text()')[0] if row.xpath('.//td[2]') else '', - 'EnrollmentPlan': row.xpath('.//td[3]/text()')[0] if row.xpath('.//td[3]') else '', - 'ControlLine': row.xpath('.//td[4]/text()')[0] if row.xpath('.//td[4]') else '', - 'AdmissionLine': row.xpath('.//td[5]/text()')[0] if row.xpath('.//td[5]') else '', - 'ProAdmissionLine': row.xpath('.//td[6]/text()')[0] if row.xpath('.//td[6]') else '', - 'ReferenceRanking': row.xpath('.//td[7]/text()')[0] if row.xpath('.//td[7]') else '', - } - if data['FamCategories'] == '科类': - continue - datas.append(data) - - # 保存到MySQL - save_to_mysql(datas) - - -# 保存到MySQL函数 -def save_to_mysql(data_list): - connection = pymysql.connect(**db_config) - try: - with connection.cursor() as cursor: - # 插入数据 - insert_sql = """ - INSERT INTO `enroll` (`year`, `category`, `ProDirection`, `FamCategories`, `EnrollmentPlan`, `ControlLine`, `AdmissionLine`, `ProAdmissionLine`, `ReferenceRanking`) - VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) - """ - for data in data_list: - cursor.execute(insert_sql, ( - data['year'], - data['category'], - data['ProDirection'], - data['FamCategories'], - data['EnrollmentPlan'], - data['ControlLine'], - data['AdmissionLine'], - data['ProAdmissionLine'], - data['ReferenceRanking'] - )) - - # 提交事务 - connection.commit() - finally: - connection.close() - -def main(): - years_urls = { - 2020: 'https://zjc.ncu.edu.cn/zszx/lnfs/3e5d5e97e5924d1794fd0eba09b79bf2.htm', - 2021: 'https://zjc.ncu.edu.cn/zszx/lnfs/47c901697a5549e998baf512a0c384f5.htm', - 2022: 'https://zjc.ncu.edu.cn/zszx/lnfs/9ba4f80248874172af2937017620226b.htm', - 2023: 'https://zjc.ncu.edu.cn/zszx/lnfs/5f3d9db4a5304265be3e31725a290b5c.htm' - } - # 遍历年份和对应的URL,爬取并保存数据 - for year, url in years_urls.items(): - crawl_and_save(year, url) - -if __name__ == '__main__': - main()