利用xpath进行数据抓取,存入mongo数据库,有心的同学可以尝试做抢课脚本哦!采用云打码平台进行验证码识别,当然手动输入也不是不可以的。

# -*- coding: UTF-8 -*-
_author_ = 'zy'
_date_ = '2019/2/1 0001 17:50'
import requests
import re
import sys'''模拟登录'''
CaptchaUrl = "http://210.42.121.241//servlet/GenImg"
PostUrl = "http://210.42.121.241/servlet/Login"
# 保存验证码到本地
s=requests.session()
c_header={
'Host': '210.42.121.241',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
}
image=s.get(CaptchaUrl,headers=c_header)f=open("test.jpg",'wb')
f.write(image.content)
f.close()import ydmSecretCode = ydm.use_ydm('test.jpg')# SecretCode = ydm_func(YUNDAMA_APP_ID,YUNDAMA_APP_KEY,YUNDAMA_USER,YUNDAMA_PASS,"test.jpg",1004)
print(SecretCode)postData = {
'id': '',
'pwd': '',
'xdvfb': SecretCode,
}con=s.post(PostUrl,postData)
l_cookie=con.cookies
# 打开保存的验证码图片 输入
print(l_cookie)headers = {
'Host':'210.42.121.241',
'Origin':'http://210.42.121.241',
# 'Cookie':l_cookie,
'Referer':'http://210.42.121.241/guest/guest_chooseLsn_parent.jsp',
'User-Agent': 'User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36',
}
con_url='http://210.42.121.241/guest/guest_choose_PubLsn_list.jsp'
contents=s.get(con_url,headers=headers)
st_url='http://210.42.121.241/guest/guest_choose_PubLsn_list.jsp?XiaoQu=0&credit=0&keyword=&pageNum={page}'
#理解了urlencode的意思,他是表达了将数据在网址上体现
print(contents.cookies)
#http://210.42.121.241/guest/guest_choose_PubLsn_list.jsp?XiaoQu=0&credit=0&keyword=&pageNum=4
#url = user_url.format(uid=userid)
#http://210.42.121.241/guest/guest_choose_PubLsn_list.jsp?XiaoQu=0&credit=0&keyword=&pageNum=4
#total_count
contents=s.get(st_url,headers=headers)from lxml import etree
import pymysql,pymongo,random
dbname = 'WHU教务系统'
client = pymongo.MongoClient('127.0.0.1', 27017)  # 缺少一步骤进行属性的清洗操作,确定是否有这个值
db = client.coursewith open("test.html",'wb') as f:f.write(contents.content)html = etree.parse('test.html', etree.HTMLParser())
result = html.xpath('//a[@class="navegate"]')
pages=len(result)
print(pages)
pages=24
print(html)
start_url='http://210.42.121.241/guest/guest_choose_PubLsn_list.jsp?XiaoQu=0&credit=0&keyword=&pageNum='for page in range(pages):page=page+1st_url=start_url+str(page)print(st_url)file_name='test'+str(page)+'.html'print(file_name)#/html/body/table/tbody/tr[2]/td[5]body=s.get(st_url,headers=headers)with open(file_name, 'wb') as f:f.write(body.content)html = etree.parse(file_name, etree.HTMLParser())li = html.xpath('//table[@class="table listTable"]/tr')  # /html/body/table/tbody/tr[1]rows = len(li) - 1for row in range(rows):row=row+1if row==1:passelse:data={}xpa= '//table[@class="table listTable"]/tr[{row}]/td[1]/text()'.format(row=row)data['课程名']=html.xpath(xpa)xpa = '//table[@class="table listTable"]/tr[{row}]/td[2]/text()'.format(row=row)data['学分']=html.xpath(xpa)xpa = '//table[@class="table listTable"]/tr[{row}]/td[3]/font/text()'.format(row=row)xpb = '//table[@class="table listTable"]/tr[{row}]/td[3]/text()'.format(row=row)data['剩余人数'] = html.xpath(xpa)xpa= '//table[@class="table listTable"]/tr[{row}]/td[4]/text()'.format(row=row)data['教师名'] = html.xpath(xpa)xpa = '//table[@class="table listTable"]/tr[{row}]/td[5]/text()'.format(row=row)data['职称'] = html.xpath(xpa)xpa = '//table[@class="table listTable"]/tr[{row}]/td[6]/text()'.format(row=row)data['授课学院'] = html.xpath(xpa)xpa = '//table[@class="table listTable"]/tr[{row}]/td[7]/text()'.format(row=row)data['教材'] = html.xpath(xpa)xpa = '//table[@class="table listTable"]/tr[{row}]/td[8]/text()'.format(row=row)data['学年'] = html.xpath(xpa)xpa = '//table[@class="table listTable"]/tr[{row}]/td[9]/text()'.format(row=row)data['学期'] = html.xpath(xpa)xpa = '//table[@class="table listTable"]/tr[{row}]/td[10]/div[@class="overflow"]/text()'.format(row=row)data['上课时间地点']=html.xpath(xpa)xpa = '//table[@class="table listTable"]/tr[{row}]/td[@id="tips"]/div/text()'.format(row=row)data['授课类型'] = html.xpath(xpa)for key in data:if len(data[key])==1:data[key]=data[key][0]if len(data[key])==0:data[key]=Noneprint(data)db[dbname].insert_one(data)print('插入一条')# def deal_with_list(dbname):
#     cursor = db[dbname].find()
#     for data in cursor:
#         for key in data:
#             try:
#
#
#         data = {
#             "text": comment
#         }
#
#         mongoid = data['_id']
#         myquery = {"_id": mongoid}
#         newvalues = {"$set": data}
#
#         db[dbname].update_one(myquery, newvalues)

武汉大学教务系统爬虫相关推荐

  1. 新版方正教务系统爬虫

    新版方正教务系统爬虫 技术 解释 Python 2.7 BeautifulSoup 4.X Pycharm 2017 Firefox - Firebug - 新版教务处地址 218.199.228.4 ...

  2. 湖南工业大学教务系统爬虫(模拟登陆篇)

    湖南工业大学教务系统爬虫(模拟登陆篇) 之前写了一个教务系统的爬虫程序,可以根据用户要求爬取任何一部分的数据,也可以模拟提交数据,可能这也是部分工大计算机学生比较感兴趣的,所以今天就在这分享一下整个的 ...

  3. 拟物校园 | 拟物校园,一个高校教务系统爬虫,现支持正方教务、青果教务。

    特别声明:除非注明,否则均为 夏末浅笑博客 原创文章,禁止任何形式转载 nivinEdu 拟物教务,一个高校教务系统爬虫 github:https://github.com/nivin-studio/ ...

  4. python实现高校教务管理系统_Python实现新版正方教务系统爬虫

    目录~ 引入 需要什么软件? 模拟登陆 代码实现(登陆) 模拟获取成绩 代码实现(获取成绩) 解析成绩 测试(完成图) 作者的话 引入 就在我刚刚写完旧版正方系统爬虫的时候(旧版正方系统爬虫代码) 学 ...

  5. Python实现新版正方教务系统爬虫(二)

    前言 哎对不起 我可能是silly boy 我想在学校里把去年的坑填了 但是发现新版的教务系统代码没传到git上 我现在就成了个对着空ide发呆的憨憨(代码在家里啦 所以填坑就再过会吧 那就稍微闲聊一 ...

  6. 广州商学院Python正方教务系统爬虫(获取个人信息成绩课表修改密码)

    使用python的requests库简单爬取,使用xpath解析内容 可以获取个人信息.个人照片.成绩单和课表 github地址:https://github.com/PythonerKK/GZCC- ...

  7. 湖南工业大学教务系统爬虫(课表获取篇)

    前言 之前写了模拟登陆的过程,因为爬课表需要先登录,所以没看过之前那篇博客的先回去看一下怎么通过模拟登陆获取cookie,下面是我用这些写的一个小程序和安卓应用 分析 因为新版教务系统前端所使用的方式 ...

  8. 教务系统爬虫收集学生成绩信息

    文章目录 1 总体介绍 2 获取token的思路 3 通过token访问成绩页面 4 解析成绩页面返回的json 5 导出数据到Excel 1 总体介绍 近日学校上线了家长督学系统.通过该系统,输入学 ...

  9. 正方教务系统爬虫实现

    主要库 requests,json,re 分析网页 第一眼就看到网页后缀是.aspx,也就是用的ASP.NET技术,不算老熟人有兴趣可以了解下https://baike.baidu.com/item/ ...

  10. 正方教务系统成绩爬虫的实现

    正方教务系统爬虫 简介 一.设计思路以及工具 二.实现步骤 1.登陆流程 1.1抓取登陆链接 1.2 验证码获取 1.3 发送登陆请求 2.读入数据 2.1 获取历年成绩对应的__VIEWSTATE ...

最新文章

  1. 《从问题到程序:用Python学编程和计算》——第3章 基本编程技术 3.1 循环程序设计...
  2. php 时间 插件,PHP中Carbon日期时间处理利器详解
  3. java循环输入直到,使用循环接受其他用户输入,直到用户输入结束输入的值
  4. python常见错误解决路线图
  5. 在eclipse中使用git创建本地库,以及托管项目到GitHub超详细教程
  6. as3 socket 跨域连接
  7. LINUX下载及编译libtool
  8. linux常用命令(21)tar命令
  9. idea启动报错,插件报错:internal error please refre to http://jb.gg/ide/critical-starup-error
  10. 用Java实现代码字符画效果
  11. (组合数 +快速幂+逆元+费马小引理)acwing 886. 求组合数 II
  12. 杭州电子科技大学程序设计竞赛(2016’12)- 网络同步赛 1004
  13. 视频教程-JavaScript打飞机小游戏视频教程-JavaScript
  14. 题目 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。 样例 括号必须依照 ()顺序表示, ()[]
  15. 如何删除电脑计算机用户名和密码,如何删除电脑设置的密码
  16. 塔望 · 食界人物|中国功能饮料A股第一股东鹏饮料创始人林木勤
  17. 23岁那年你正处在哪个状态?现在呢?
  18. Poj·Dessert
  19. CSDN常见问题汇总
  20. 构建企业级云原生日志系统架构

热门文章

  1. 音乐鉴赏 周海宏 网络课程 题库(Ctrl+f查找)点赞哦
  2. 好用文件整理工具,需要速来
  3. 云服务器与实体服务器性能,实体服务器和云服务器 的利与弊
  4. GANs(生成对抗网络)浅析
  5. 【深度学习风格化/生成艺术】图像融合--毫无违和
  6. AnimeGAN v2:动漫风格化GAN
  7. XYNUOJ 第四次比赛 懒省事得小名
  8. 今天您大数据营销了吗?
  9. 看一点逻辑学,试图理解一点真相
  10. PHP 格式化字节大小