2019独角兽企业重金招聘Python工程师标准>>>

字符串数据解析 太难看 = =

login_widget::login_widget(QWidget *parent) ://QWidget(parent),
ui(new Ui::login_widget)
{ui->setupUi(this);p = (MainWindow*)parent;//loading = new loading_widget(this);#ifndef Q_OS_WIN32FixScreen();
#endiftimer_timeout = new QTimer(this);connect(timer_timeout, SIGNAL(timeout()), this, SLOT(slot_timer()));manager = new QNetworkAccessManager(this);connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(doManagerFinished(QNetworkReply*)));connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(slot_verfy()));connect(ui->pushButton_3, SIGNAL(clicked()), this, SLOT(slot_close()));connect(ui->pushButton_4, SIGNAL(clicked()), this, SLOT(slot_shuom()));QMovie *pm = new QMovie(":/loading.gif");ui->label_7->setMovie(pm);pm->setScaledSize(QSize(100 * PublicFunc::getFactory(), 30 * PublicFunc::getFactory()));pm->start(); //才会开始动QPixmap pix;pix.load(":/1.png");ui->label_6->setPixmap(pix);setHide();}void login_widget::slot_timer()
{timer_timeout->stop();setHide();QMessageBox::warning(this, char_net_error, char_net_error_center);slot_close();}void login_widget::setShow()
{ui->label_6->setVisible(true);ui->label_7->setVisible(true);}void login_widget::setStart(int time)/*超时15 S*/
{timer_timeout->start(time);}void   login_widget::setHide()
{ui->label_6->setVisible(false);ui->label_7->setVisible(false);}void login_widget::setLoginVisiable(bool is)
{ui->pushButton->setVisible(is);ui->pushButton_2->setVisible(is);ui->lineEdit->setVisible(is);ui->lineEdit_2->setVisible(is);ui->lineEdit_3->setVisible(is);ui->label->setVisible(is);ui->label_2->setVisible(is);ui->label_3->setVisible(is);ui->label_4->setVisible(is);}void login_widget::doManagerFinished(QNetworkReply *reply)
{timer_timeout->stop();QByteArray binary = reply->readAll();if (binary.size() <= 0){setHide();QMessageBox::warning(this, "\347\275\221\347\273\234\351\224\231\350\257\257", "\350\257\267\346\243\200\346\237\245\347\275\221\347\273\234\350\277\236\346\216\245");//reply->deleteLater();delete reply;return;}QString result = QTextCodec::codecForName("gb2312")->toUnicode(binary);if (reply->url() == homepageUrl){/*登陆*/if (reply->operation() == QNetworkAccessManager::GetOperation){QRegExp reg("name=\"__VIEWSTATE\" value=\"([^\"]+)\"");if (reg.indexIn(result) != -1){viewstate = reg.cap(1);}if (reply->rawHeader("Set-Cookie").length()){jsessionid = reply->rawHeader("Set-Cookie");jsessionid = jsessionid.left(jsessionid.indexOf(';'));}else{}slot_verfy();}else{setStart();QNetworkRequest request;request.setRawHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/8.0)");request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");request.setRawHeader("Accept-Encoding", "gzip, deflate");request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8");request.setRawHeader("Cache-Control", "max-age=0");request.setRawHeader("Cookie", jsessionid.toLatin1());request.setRawHeader("Connection", "Keep-Alive");//     qDebug() << mainpageUrl;request.setUrl(QUrl(mainpageUrl));manager->get(request);setShow();}}else if (reply->url() == captchaUrl){/*验证码*/QPixmap pixmap;if (pixmap.loadFromData(binary)){setHide();ui->label->setVisible(true);ui->pushButton->setVisible(true);#ifndef Q_OS_WIN32ui->label->setPixmap(pixmap.scaled(72 * 2.2 * PublicFunc::getFactory(), 27 * 2.2*PublicFunc::getFactory(), Qt::KeepAspectRatio));
#elseui->label->setPixmap(pixmap);
#endif}}else if (reply->url() == url_kebiao){/*课表*/dataTable.clear();//ui->textEdit->append(QString::fromLocal8Bit(binary.data()));QString data = QString::fromLocal8Bit(binary.data());/**/int x = data.indexOf("trbg1") + 10;int y = data.indexOf("datelist");data = data.mid(x, y - x);x = data.indexOf("trbg1") + 10;info = (data.mid(x, data.indexOf("labTip") - x));x = data.indexOf("Table1") - 11;y = data.indexOf("</table>");data = data.mid(x, data.size() - x);data = data.mid(0, data.indexOf("</table>"));x = data.indexOf("</tr>") + 5;data = data.mid(x, -1);x = data.indexOf("</tr>") + 5;data = data.mid(x, -1);QString tm;x = info.indexOf("&nbsp");info = info.mid(0, x);x = info.indexOf(">");info = info.mid(x + 1, -1);info.remove("|");info.remove("</span>");info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1);info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1);info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1);info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1);info.remove(info.indexOf("<"), info.indexOf(">") - info.indexOf("<") + 1);info.remove("\t");setHide();info.insert(0, "\n");QMessageBox::warning(this, "\350\257\276\350\241\250\344\277\241\346\201\257", info);/*课表信息*/QSettings set("kebiao", "1");set.setValue("info", info);/*分割完成 接下来 提取每一行数据 一共14行*/for (int i = 0; i < 14; i++){x = data.indexOf("<tr>");y = data.indexOf("</tr>") + 5;class_arry[i] = data.mid(x, y - x);data = data.mid(y, -1);//    data.remove(class_arry[i]);}/*提取每一行完毕 开始分割列*/QString day[15];QString tmp;for (int xx = 0; xx < 14; xx += 2){class_arry[xx].remove("</tr>");class_arry[xx].remove("<tr>");for (int i = 0; i < 7; i++){x = class_arry[xx].lastIndexOf("<td");y = class_arry[xx].lastIndexOf("</td>") + 5;day[i] = class_arry[xx].mid(x, y - x);class_arry[xx] = class_arry[xx].mid(0, x);day[i].remove(day[i].mid(0, day[i].indexOf(">") + 1));day[i].remove("&nbsp;</td>");day[i].remove("</td>");day[i].replace("<br>", ".");/*取出每一节课完成 开始取出每一节课信息*/for (int iii = 0; iii < 3; iii++){/*取出名字*/y = day[i].indexOf(".");tmp = day[i].mid(0, y);dataTable.data[6 - i][xx][iii].class_name = tmp;//    day[i].remove(tmp + ".");day[i] = day[i].mid(y + 1, -1);/*课程性质*/y = day[i].indexOf(".");tmp = day[i].mid(0, y);dataTable.data[6 - i][xx][iii].class_pro = tmp;tmp = tmp + ".";//  day[i].remove(tmp);day[i] = day[i].mid(y + 1, -1);/*时间*/y = day[i].indexOf(".");tmp = day[i].mid(0, y);dataTable.data[6 - i][xx][iii].class_time = tmp;tmp = tmp + ".";//day[i].remove(tmp);day[i] = day[i].mid(y + 1, -1);/*老师*/y = day[i].indexOf(".");tmp = day[i].mid(0, y);dataTable.data[6 - i][xx][iii].class_techer = tmp;tmp = tmp + ".";//day[i].remove(tmp);day[i] = day[i].mid(y + 1, -1);/*地点*/y = day[i].indexOf(".");if (y <= 0){dataTable.data[6 - i][xx][iii].class_posi = day[i];day[i] = "";}else{tmp = day[i].mid(0, y);dataTable.data[6 - i][xx][iii].class_posi = tmp;tmp = tmp + "..";//day[i].remove(tmp);day[i] = day[i].mid(y + 2, -1);}if (day[i].size() < 1)break;}/* QTableWidgetItem* z = new QTableWidgetItem(day[i]);z->setTextAlignment(Qt::AlignCenter);p->ui->tableWidget->setItem(xx, 6 - i, z);p->ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置不可编辑p->ui->tableWidget->horizontalHeader()->resizeSection(6 - i, 80 * PublicFunc::getFactory()); //设置表头第一列的宽度为150p->ui->tableWidget->setRowHeight(xx, PublicFunc::getFactory() * 100);p->ui->tableWidget->setRowHeight(xx + 1, 0);QFont font;font.setPointSize(12);font.setFamily("simsun");z->setFont(font);*/}}p->syncTable(setCenter::current_week);QMessageBox::information(this, "\346\217\220\347\244\272", "\345\257\274\345\205\245\350\257\276\350\241\250\346\210\220\345\212\237");/*错误*//*提示 导入课表成功*/ui->pushButton->setVisible(true);slot_close();}else if (reply->url() == url_chenji){if (reply->operation() == QNetworkAccessManager::GetOperation){/*get*/QRegExp reg("name=\"__VIEWSTATE\" value=\"([^\"]+)\"");if (reg.indexIn(result) != -1){viewstate = reg.cap(1);}if (reply->rawHeader("Set-Cookie").length()){jsessionid = reply->rawHeader("Set-Cookie");jsessionid = jsessionid.left(jsessionid.indexOf(';'));}setStart();QNetworkRequest request;request.setRawHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/8.0)");request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");request.setRawHeader("Accept-Encoding", "gzip, deflate");request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8");request.setRawHeader("Cache-Control", "max-age=0");request.setRawHeader("Cookie", jsessionid.toLatin1());request.setRawHeader("Connection", "Keep-Alive");request.setRawHeader("Referer", ss.toStdString().c_str());QUrl mainpageUrl = QUrl(ss);request.setUrl(QUrl(url_chenji));QUrlQuery query;query.addQueryItem("__EVENTTARGET", "ddlxn");query.addQueryItem("__EVENTARGUMENT", "");query.addQueryItem("__VIEWSTATE", viewstate);QString xueqi;char xuen[30];QDate date = QDate::currentDate();if (date.month() >= 6 && date.month() <= 10){/*第二学期*/xueqi = "2";sprintf(xuen, "%d-%d", date.year() - 1, date.year());}else  if (date.month() > 10){/*第1学期*/xueqi = "1";sprintf(xuen, "%d-%d", date.year(), date.year() + 1);}else{/*第1学期*/xueqi = "1";sprintf(xuen, "%d-%d", date.year() - 1, date.year());}query.addQueryItem("ddlxn", xuen);query.addQueryItem("ddlxq", xueqi);query.addQueryItem("btnCx", "+%B2%E9++%D1%AF+");QByteArray postData = query.toString(QUrl::FullyEncoded).replace("+", "%2B").toLatin1();manager->post(request, postData);setShow();}else if (reply->operation() == QNetworkAccessManager::PostOperation){/*post*/ui->pushButton->setVisible(true);setHide();do_chengji(binary);}}else{setHide();/*登陆后*/QString s = binary.data();if (s.indexOf("main_html") <= 0){/*登陆失败*/slot_verfy();QMessageBox::warning(this, "\351\224\231\350\257\257", "\345\257\206\347\240\201\346\210\226\351\252\214\350\257\201\347\240\201");/*错误*//*登陆失败*/}else{/*登陆成功 开始获取课表*/if (is_kebiao){slot_getKebiao();}elseslot_getChenJi();// setLoginVisiable(false);}}//reply->deleteLater();delete reply;}void login_widget::on_pushButton_clicked()
{/*输入规则判断*/if (ui->lineEdit_2->text().length() < 11){QMessageBox::warning(this, char_tixing, "\350\257\267\346\255\243\347\241\256\350\276\223\345\205\245\345\255\246\345\217\267");return;}if (ui->lineEdit_3->text().length() == 0){QMessageBox::warning(this, char_tixing, "\345\257\206\347\240\201\344\270\215\350\203\275\344\270\272\347\251\272");return;}if (ui->lineEdit->text().length() == 0){QMessageBox::warning(this, char_tixing, "\350\257\267\350\276\223\345\205\245\351\252\214\350\257\201\347\240\201");return;}if (ui->lineEdit->text().length() < 4){QMessageBox::warning(this, char_tixing, "\351\252\214\350\257\201\347\240\201\351\224\231\350\257\257");return;}ui->pushButton->setVisible(false);/*登陆*/setStart();setShow();QNetworkRequest request;request.setUrl(homepageUrl);request.setRawHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/8.0)");request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");request.setRawHeader("Accept-Encoding", "gzip, deflate");request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8");request.setRawHeader("Cache-Control", "max-age=0");request.setRawHeader("Cookie", jsessionid.toLatin1());request.setRawHeader("Connection", "Keep-Alive");query.addQueryItem("txtUserName", ui->lineEdit_2->text());query.addQueryItem("TextBox2", ui->lineEdit_3->text());query.addQueryItem("txtSecretCode", ui->lineEdit->text());query.addQueryItem("RadioButtonList1", "%D1%A7%C9%FA");QByteArray postData = query.toString(QUrl::FullyEncoded).replace("+", "%2B").toLatin1();//  qDebug() << postData;request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");request.setHeader(QNetworkRequest::ContentLengthHeader, postData.length());manager->post(request, postData);}void login_widget::slot_getChenJi()
{setShow();setStart();QNetworkRequest request;request.setRawHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.3; WOW64; Trident/8.0)");request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");request.setRawHeader("Accept-Encoding", "gzip, deflate");request.setRawHeader("Accept-Language", "zh-CN,zh;q=0.8");request.setRawHeader("Cache-Control", "max-age=0");request.setRawHeader("Cookie", jsessionid.toLatin1());request.setRawHeader("Connection", "Keep-Alive");request.setRawHeader("Referer", ss.toStdString().c_str());QUrl mainpageUrl = QUrl(ss);request.setUrl(QUrl(url_chenji));manager->get(request);}void login_widget::slot_close()
{manager->clearAccessCache();timer_timeout->stop();setHide();this->hide();
}

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/495678

KK课表抓取教务系统相关推荐

  1. 从零开始开发一个自动抓取教务系统课表等信息并动态显示的安卓课程表APP,原理分析及功能实现完美教程

    前言 之前写过一篇JAVA使用HttpClient模拟登录正方教务系统,爬取学籍信息和课程表成绩等,超详细登录分析和代码注解的教程,在移植到移动平台时候,发现了如下问题: 抓取课表偶尔会不完全,出现全 ...

  2. python3爬取教务系统的个人学期课程表(无头谷歌浏览模拟登录)

    前言 今天带来的是与上次爬取教务系统获取成绩单的姐妹版--爬取教务个人的学期课程表. 工具 使用pycharm编辑器,安装selenium库,beautifulsoup库,csv库,当然需要下载对应的 ...

  3. Android抓取正方系统课程——实现自己的课程表

    Android抓取正方系统课程--实现自己的课程表 上一篇博客讲解了如何使用http协议模拟登陆正方系统,今天继续实现如何抓取课程表并显示在Android界面上,效果如图: 由于偷懒,在界面上没下太多 ...

  4. python3爬虫模拟登录爬取教务系统成绩单(获取cookie操作)

    前言 今天来写写爬取教务系统的爬虫,此次的爬虫目的是爬取教务系统里面的成绩单,涉及到的库依旧是selenium,re,beautifulsoup,Options,今天多了个csv库用来处理爬取的数据, ...

  5. php正方系统抓取课表,以正方教务系统为例,用php模拟登陆抓取课表、空教室,抓取课表...

    以正方教务系统为例,用php模拟登陆抓取课表.空教室,抓取课表 课程格子和超级课程表这两个应用,想必大学生都很熟悉,使用自己的学号和教务系统的密码,就可以将自己的课表导入,随时随地都可以在手机上查看. ...

  6. python3爬取教务系统_python requests模拟登陆正方教务管理系统,并爬取成绩

    最近模拟带账号登陆,查看了一些他人的博客,发现正方教务已经更新了,所以只能自己探索了. 登陆: 通过抓包,发现需要提交的值 需要值lt,这是个啥,其实他在访问登陆页面时就产生了 session=req ...

  7. Python爬虫练习记录-爬取教务系统成绩

    模拟post提交表单,获取Cookie 使用火狐浏览器打开学校教务系统,F12打开开发者模式 点击网络,持续记录数据包,发现login.action是提交的表单信息 查看表单数据,发现前端对param ...

  8. 用selenium全自动化爬取教务系统作业清单

    写在前文:撰写本文仅用于学习交流,不承担因此带来任何的潜在风险和责任 文章目录 0 目的明确,限制和思考 1 前置模块准备 1.1 selenium安装及简单操作 1.2 python lxml模块安 ...

  9. 开发一款抓取Android系统Log的APP(logcat, kernel, Memory, cpu)

    近期项目需要一款抓取系统log的实用工具,具体的内容包括kernel中的log, cpu中的log,  memory 中的log, 以及system中的log,在Android4.1之后 认为应用读取 ...

  10. 基于Python爬虫的股票成交量数据抓取分析系统

    目录 数据获取 2 1.1. 实验环境搭建 2 1.2. 抓取数据 2 1.2.1. 新浪财经 3 1.2.2. 网易财经 6 1.2.3. 东方财富 12 1.2.4. TuShare (挖地兔) ...

最新文章

  1. TVM如何训练TinyML
  2. wordpress自动批量定时发布插件 DX-auto-publish
  3. Oracle技术之Data Pump介绍
  4. MFC Timer定时器
  5. Opencv Kmeans聚类算法
  6. malloc,free,new,delete解析(原)
  7. SSRS 使用(1)建立简单的Report
  8. rog live service是什么_双11手机怎么买?ROG游戏手机3“独一份”体验,值得剁手...
  9. 高校何时开学?教育部回应
  10. 边缘计算助力云游戏成为5G时代的杀手级应用
  11. UML应用:业务内涵的分析抽象amp;表达
  12. Oracle VM VirtualBox 随系统自动启动虚拟机的方法
  13. WPF-将DataGrid控件中的数据导出到Excel
  14. 最新版c语言经典习题100例(最全面)
  15. 《剑来》语句摘录(六)
  16. c语言中puts的作用是,C语言的字符串输出puts()函数
  17. 马克飞象(markdown)的快捷键
  18. 克里斯坦森的破坏性创新—《可以量…
  19. 华硕服务器系统安装win7系统教程,华硕光盘重装系统win7图文教程
  20. C#调用12306API做余票查询

热门文章

  1. 25个常用Matplotlib图的Python代码,干货收藏!
  2. 阿里云域名转入腾讯云
  3. 《麻辣江湖》即将上线!
  4. LINUX时间格式转换
  5. idea中快速查找类和方法名
  6. mac 系统服务器地址ping不通,MAC ping IP 地址(ping通/ping不通)
  7. ISTQB FL初级认证考试资料(中文)
  8. 角度计算公式 角度换算 想知道1是多少度; 度和弧度的关系 弧微分: 曲率,曲半径,曲率圆:
  9. 2021年十大热门编程语言
  10. 08-22 CDR数据时钟恢复电路