用python爬取高考网历年高考分数线将数据放入MySQL并绘制图表
2020-02-17 04:22
441 查看
用python爬取高考网历年高考分数线
# 导入爬虫的库 import requests from lxml import etree # 导入画图库 from pyecharts.charts import Bar, Line, Pie from pyecharts import options as opts # 导入数据库连接库 import pymysql # 定义函数test(),功能爬取网站数据 def test(): # 定义爬取的连接 url = "http://www.gaokao.com/yunnan/yngkcj/" # 使用rs获取返回值 rs = requests.get(url) # 定义rs的字符集格式 rs.encoding = "gbk" # 将网页的文本信息传给html html = rs.text # 将网页转化为可以分析的格式 myHtml = etree.HTML(html) # 获取网页上的年份 nian = myHtml.xpath("//tr[@class='wkTit']/th/text()") # 将年转化为字符串列表 year = [] for i in range(0, 11): year.append(nian[i]) # 打印年份 print(year) # 获取网页上的文文科和理科的一本线成绩 one = myHtml.xpath("//tr[@class='c_blue']/td/text()") # 将文科一本线化为字符串列表,同时将“-”替换为“0” one1 = [] for i in range(1, 12): one1.append(one[i].replace("\r\n\t\t\t\t", "").replace("-", "0")) one2 = [] # 将理科一本线化为字符串列表,同时将“-”替换为“0” for i in range(25, 36): one2.append(one[i].replace("\r\n\t\t\t\t", "").replace("-", "0")) # 获取网页上的文文科和理科的二本线成绩 two = myHtml.xpath("//tr[@class='c_white']/td/text()") # 将文科二本线化为字符串列表,同时将“-”替换为“0” two1 = [] for i in range(1, 12): two1.append(two[i].replace("\r\n\t\t\t\t", "").replace("-", "0")) # 将理科二本线化为字符串列表,同时将“-”替换为“0” two2 = [] for i in range(25, 36): two2.append(two[i].replace("\r\n\t\t\t\t", "").replace("-", "0")) # 将所有的本科线打印出来 print(one1) print(two1) print(one2) print(two2) newList = [] # 将年份,文科、理科一本,文科、理科二本拼作一个newList for x in zip(year, one1, two1, one2, two2): newList.append(x) return newList # 定义插入函数 def insertData(myList): # 创建数据库连接 con = pymysql.connect(host="localhost", user="root", passwd="285989", database="practice", charset="utf8") # 创建游标对象 cur = con.cursor() # 定义sql语句 sql = "insert into test_yunnan (year,onew,twow,onel,twol) values(%s,%s,%s,%s,%s)" # 执行插入 num = cur.executemany(sql, myList) if num > 0: print("插入成功") else: print("插入失败") con.commit() cur.close() con.close() # 定义绘图函数,x表示年份列表,y1表示文科一本列表,y2表示文科二本列表,y3表示理科一本列表,y4表示理科二本列表 def testZhe(x, y1, y2, y3, y4): # 定义折线图对象,大小,位置 l = Line(init_opts=opts.InitOpts(width="100%", height="800px")) # 加入x轴的值 l.add_xaxis(x) l.add_xaxis(x) l.add_xaxis(x) l.add_xaxis(x) # 加入y轴的值 l.add_yaxis("文科一本", y1) l.add_yaxis("理科一本", y2) l.add_yaxis("文科二本", y3) l.add_yaxis("理科二本", y4) # 定义每条线的颜色 l.set_colors(["green", "pink", "red", "blue"]) # 定义生成图的文件类型,文件名 l.render("云南高考折线图.html") print("图标生成成功!") # 定义数据库获取函数,com表示要获取的字段,tables表示要用的数据表 def countJob(com, tables): # 创建数据库连接 con = pymysql.connect(host="localhost", user="root", passwd="285989", database="practice", charset="utf8") # 创建游标对象 cur = con.cursor() # 定义sql语句 sql = "select %s from %s " % (com, tables) # 执行查询 cur.execute(sql) # 获取查询的结果 rs = cur.fetchall() # 将结果转化为字符串列表 results = [] for it in rs: for i in range(len(it)): results.append(it[i]) print(results) # 关闭连接 cur.close() con.close() return results # 定义字符串转化为整型函数 def strToint(list): newlist = [] for x in range(len(list)): newlist.append(int(list[x])) return newlist if __name__ == "__main__": # test() # 存入数据库 insertData(test()) # 定义pr用于存数据库名 pr = "test_yunnan" # x表示年份 x = countJob("year", pr) # y1表示文科一本 y1 = strToint(countJob("onew", pr)) # y1表示文科二本 y2 = strToint(countJob("twow", pr)) # y1表示理科一本 y3 = strToint(countJob("onel", pr)) # y1表示理科二本 y4 = strToint(countJob("twol", pr)) # 传入参数 testZhe(x, y1, y2, y3, y4)
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 软件测试基础+测试开发+python+测试工具免费领取
- python自学中的我
- ZZULI 1015: 计算时间间隔 Python
- python起步——可变对象和不可变对象
- Gvim —— win 7 下 vim 环境配置 及python开发常用设置
- 使用python脚本提取OC中写死的字符串方便国际化
- python3利用pandas将csv文件中的数据导入mysql数据库
- 【Python基础操作】1.数据读取(csv,Excel,MySQL)
- Python3.6.2 图形界面模块Tk (Day1)
- 用python+tkinter写个校验和工具
- python selenium+pywin32 实现网页另存为
- python 输出所有大小写字母和0~9数字
- pycharm导入python包
- python神器pycharm的安装
- python字符串前加 f 的含义
- Python中 IOError 和 FileNotFoundError
- Python-List
- Python-List-Append
- Python-List-extend
- Python-List-Pop