电子科技大学 易查分网站 爬虫 批量爬取成绩

news/2024/7/19 12:34:57 标签: 爬虫, python

暑假一个人在寝室,闲来无事。

某天,辅导员恰好发了学年查分的链接,一看,发现是易查分平台,再加上手头的数据,有搞头啊,遂开始设计爬虫
易查分这网站很怪,PC版需要输入验证码,手机版就不需要了。为了方便爬取,果断选择手机版。(本来还想训练个自动填充验证码的神经网络的,可难度有些大,有空了以后补上吧)

爬虫使用selenium的webdriver技术实现。速度……只能说可以接受吧

数据准备:需查同学的姓名、学号和身份证号。 (具体获取方式……自行解决)

这段代码还融合了Excel的读写。

爬虫有风险,请遵守法律法规哦!

import xlrd
import xlwt
from selenium import webdriver
import time

allstu = []


class stu():
    def __init__(self, name, sex, number, psw):
        self.name = name
        self.sex = sex
        self.number = number
        self.psw = psw[-7:-1]
        self.dic = {}
        self.classify = ''


def readData():
    global allstu
    workbook = xlrd.open_workbook('data.xlsx')
    booksheet = workbook.sheet_by_index(0)
    col = booksheet.ncols
    row = booksheet.nrows
    print(row, col)
    for i in range(row):
        allstu.append(stu(booksheet.cell_value(i, 0), booksheet.cell_value(i, 1),
                          booksheet.cell_value(i, 3), booksheet.cell_value(i, 2)))


def writeData():
    book = xlwt.Workbook(encoding='utf-8', style_compression=0)

    sheet = book.add_sheet('Out', cell_overwrite_ok=True)
    for j in range(len(allsubjects)):
        sheet.write(0, 4 + j, allsubjects[j])

    for i in range(len(allstu)):
        sheet.write(i + 1, 0, allstu[i].name)
        sheet.write(i + 1, 1, allstu[i].sex)
        sheet.write(i + 1, 2, allstu[i].number)
        sheet.write(i + 1, 3, allstu[i].classify)
        for j in range(len(allsubjects)):
            sheet.write(i + 1, 4 + j, allstu[i].dic.get(allsubjects[j], ''))

    book.save(r'out.xls')


allsubjects = []
readData()
urls = ['http://241374.yichafen.com/mobile/queryscore/sqcode/MsTcInwmMjkwfDViN2EzZDI0NTllYzAO0O0O.html',
        'http://241374.yichafen.com/mobile/queryscore/sqcode/MsTcInwmMzAxfDViN2E2MGQwNTVkM2UO0O0O.html',
        'http://241374.yichafen.com/mobile/queryscore/sqcode/MsTcInwmMzAyfDViN2E2MTVhY2E2MDQO0O0O.html']
classes = ['通信工程', '网络工程', '物联网工程']
driver = webdriver.Chrome()

# i = 0
i = 15
while(i < len(allstu)):
# while(i < 20):
    # time.sleep(0.5)
    found = False
    for k in range(3):
        url = urls[k]
        driver.implicitly_wait(1)
        driver.get(url)
        driver.refresh()
        number = driver.find_element_by_xpath("//input[@name='s_xuehao']")
        number.clear()
        number.send_keys(allstu[i].number)
        name = driver.find_element_by_xpath("//input[@name='s_xingming']")
        name.clear()
        name.send_keys(allstu[i].name)
        psw = driver.find_element_by_xpath("//input[@name='s_2c54d23b18177aabe8759f1f551451f3']")
        psw.clear()
        psw.send_keys(allstu[i].psw)
        button = driver.find_element_by_xpath("//a[@id='submitBtn']")
        button.click()
        flag = False
        try:
            driver.implicitly_wait(0.5)
            errormsg = driver.find_element_by_xpath("//div[@class='weui-dialog__bd']")
        # print(errormsg.text)
        except:
            flag = True

        if flag:
            allstu[i].classify = classes[k]
            found = True
            subnames = driver.find_elements_by_class_name('left_cell')
            grades = driver.find_elements_by_class_name('right_cell')
            for j in range(3, len(subnames)):
                if not subnames[j].text in allsubjects:
                    allsubjects.append(subnames[j].text)
                allstu[i].dic[subnames[j].text] = grades[j].text
            break
    print('{} {} : {}, finished'.format(str(i + 1), allstu[i].name, allstu[i].classify))
    i += 1
writeData()

 

转载于:https://www.cnblogs.com/zinyy/p/9589387.html


http://www.niftyadmin.cn/n/1019618.html

相关文章

【Matlab优化求解】粒子群算法求解货物配装优化问题【含源码 414期】

一、代码运行视频&#xff08;哔哩哔哩&#xff09; 【Matlab优化求解】粒子群算法求解货物配装优化问题【含源码 414期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]牛江川,刘凯,申永军,韩彦军.遗传离散粒子群算法求解车辆货物配装问题[J]. 机械设计与制…

【Matlab优化求解】遗传算法求解车辆发车间隔优化问题【含源码 132期】

一、代码运行视频&#xff08;哔哩哔哩&#xff09; 【Matlab优化求解】遗传算法求解车辆发车间隔优化问题【含源码 132期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]裴玉龙,杨世军,潘恒彦.考虑车内拥挤状态的公交弹性发车间隔优化[J]. 东北大学学报(自…

Spark修炼之道(进阶篇)——Spark入门到精通:第二节 Hadoop、Spark生成圈简介

本节主要内容 Hadoop生态圈Spark生态圈 1. Hadoop生态圈 原文地址&#xff1a;http://os.51cto.com/art/201508/487936_all.htm#rd?sukeya805c0b270074a064cd1c1c9a73c1dcc953928bfe4a56cc94d6f67793fa02b3b983df6df92dc418df5a1083411b53325 下图给出了Hadoop生态圈中的重要…

【NOIP2006】金明的预算方案

又是一道经典的背包问题&#xff0c;在洛谷上的链接&#xff1a;https://www.luogu.org/problemnew/show/P1064 和01背包不同的是&#xff0c;物品之间存在依赖关系&#xff0c;要想购买附件就必须购买主件&#xff0c;所以就可以这样想&#xff0c;从&#xff5b;主件&#xf…

【Matlab优化覆盖】萤火虫算法求解无线网络传感覆盖优化问题【含源码 1275期】

一、代码运行视频&#xff08;哔哩哔哩&#xff09; 【Matlab优化覆盖】萤火虫算法求解无线网络传感覆盖优化问题【含源码 1275期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]赖锦辉,梁松.基于改进人工萤火虫算法的无线传感网络覆盖优化[J]. 计算机测量…

Spark修炼之道(进阶篇)——Spark入门到精通:第三节 Spark Intellij IDEA开发环境搭建

本节主要内容 Intellij IDEA 14.1.4开发环境配置Spark应用程序开发 1. Intellij IDEA 14.1.4开发环境配置 Intellij IDEA 功能十分强大&#xff0c;能够开发JAVA、Scala等相关应用程序&#xff0c;在依赖管理 智能提示等方面做到了极致&#xff0c;大家可以到:http://www.jetb…

path.join()与path.resolve()区别

1.path.resolve([...paths]) path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径。 给定的路径的序列是从右往左被处理的&#xff0c;后面每个 path 被依次解析&#xff0c;直到构造完成一个绝对路径。 例如&#xff0c;给定的路径片段的序列为&#xff1a;/f…

【Matlab优化覆盖】麻雀搜索算法求解3D无线传感器网络(WSN)覆盖优化问题【含源码 599期】

一、代码运行视频&#xff08;哔哩哔哩&#xff09; 【Matlab优化覆盖】麻雀搜索算法求解3D无线传感器网络(WSN)覆盖优化问题【含源码 599期】 二、matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]王振东,汪嘉宝,李大海.一种增强型麻雀搜索算法的无线传感器网络覆…