用python爬取高考网历年高考分数线将数据放入MySQL并绘制图表

用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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值