python爬虫数据空白,大神帮看下
程序代码:
import requests from bs4 import BeautifulSoup import matplotlib.pyplot as plt import numpy as np import sqlite3 import matplotlib matplotlib.rc("font", family='Microsoft YaHei') # 发送请求,获取响应 response = requests.get('https://www.') # 从响应中获取数据 home_page = response.content.decode(encoding='utf-8') # 创建BeautifulSoup对象 soup = BeautifulSoup(home_page, 'lxml') # 查找网页中的学校名称和成绩数据 school_name = soup.find_all(attrs={'class': 'name-cn'}) score = soup.find_all(attrs={'class': 'score'}) # 创建两个新的列表以便后续使用 school_name_Result = [] score_Result = [] # 遍历将爬取出来的网页数据写入一个新的列表 for i in range(len(school_name_Result)): school_name_Result.append(school_name[i].text) score_Result.append(score[i].text) # 逆序列表 school_name_Result.reverse() score_Result.reverse() # 设置图形化界面的整体长宽大小 plt.figure(figsize=(15,10)) plt.xticks(rotation=45) # 设置x轴显示方法 # 设置y轴最大最小值 plt.ylim(0,100) # 传递可用参数生成可视化图形 plt.bar(school_name_Result, score_Result) # 设置标题 plt.title("2021中国大学专业排名————计算机科学与技术") for i in range(len(school_name_Result)): plt.text(school_name_Result[i], score_Result[i], score_Result[i], ha="center") plt.show() # 显示创建的绘图对象 # 解决Matplotlib中文乱码问题 # mpl.rcParams['font.sans-serif'] = ['SimHei'] # 连接数据库,如没有则新建该数据库 con = sqlite3.connect('csData.db') print("Open database successfully") # 在数据库对象中创建一个列表包含主键和两个属性列 stmt="CREATE TABLE if not exists SNAME(ID INT PRIMARY KEY NOT NULL,schoolName CHAR NOT NULL,score FLOAT NOT NULL)" con.execute(stmt) print("Table created successfully") # 创建数据库游标 cur=con.cursor() # 创建两个列表用于后续保存数据 sqlString=[] sqlString_Result=[] # 遍历排名列表并暂时保存于新建的变量中用于传递参数 for i in range: sc=school_name_Result[i]; sr=score_Result[i] sqlString.append(i+1) sqlString.append(sc) sqlString.append(sr) # 将列表强制转换成元组 changeTuple=tuple(sqlString) sqlString_Result.append(changeTuple) # 清空字典 # sqlString.clear() # 批量执行多条数据库语句 cur.executemany("insert into SNAME values(?,?,?)",sqlString_Result) # 选中数据库SNAME中的所有数据 cur.execute("select * from SNAME") # 遍历返回多个元组 for item in cur.fetchall(): print(item) print("Check database successfully") print(school_name_Result) print(score_Result )