美文网首页
Python爬虫登录查询并抓取学生成绩

Python爬虫登录查询并抓取学生成绩

作者: Yinag | 来源:发表于2017-07-22 22:24 被阅读0次

    继上次爬取完广西科技大学的各个班级课表http://www.jianshu.com/p/d3e493d127db 接着来试着用Python爬虫登录查询并抓取学生的成绩(当然爬取信息,需要学号和密码,这里只能用的自己的向大家说明)

    上次,抓取学校班级的课表是一种简单的爬取,因为直接分析网页,获得自己所需要的数据即可。

    这次是用Python爬虫登录查询并抓取学生的成绩,中间多了一步就是要模拟浏览器进行登录。关于这点我走错了路,困扰我一天多,那会儿实在想不清楚为什么始终提取不出页面,结果看了学长昨晚刚写完的文章(https://pingxonline.com/php ),终于知道为什么了,因为外网无法访问教务信息管理系统,外网能查询成绩的只有柳苑晨曦网站,所以本文就以柳苑晨曦成绩查询为爬虫的对象。顿时,想哭,白白浪费时间还心力交瘁。不废话了,直接进入正题:
    (一)不要乱碰壁——明白第一点

    1. 既然Python爬虫登录查询,肯定是要知道查询成绩要登录的页面(柳苑晨曦):http://online.gxut.edu.cn/cmzx/StudentsMediaCentre.php/Index/login/chengji/1.html
      2.利用Chrome进行抓包自动监听当前网络,打开页面,按下F12,如图所示

      3.此时有这些文件出现,很明显chengji文件是我们想要的文件,点击打开

      4.查找我们刚刚输入的data,一直向下拉就可以看到了

      同时,我们可以看到Request Header里面的内容,Cookie、Referer、User-Agent

      在这里我一定要说一下Cookie,刚开始我在网上搜索资料的时候,有的利用两次请求页面而获得,然后我查找了一下它的作用:
      什么是Cookies?
      通俗点讲:Cookies是一种能够让网站服务器把少量数据储存到客户端的硬盘或内存,或是从客户端的硬盘读取数据的一种技术。Cookies是当你浏览某网站时,由Web服务器置于你硬盘上的一个非常小的文本文件,它可以记录你的用户ID、密码、浏览过的网页、停留的时间等信息。
      经过我多次打开此页面,观察而得,这个Cookie是不变的。
      (二)模拟登陆

      (三)解析页面,仍然利用BeautifulSoup

      查看HTML文档,可以知道成绩是存放在<tbody id="biaoge">的<td>标签里,利用创建的soup对象搜索节点

      (四)完整代码
      把获得的数据传入数据库进行保存
    # -*-coding=utf-8-*-
    import re
    import urllib
    import urllib2
    import cookielib
    from bs4 import BeautifulSoup
    import pymysql.cursors
    # 连接数据库
    connection = pymysql.connect(
        host='localhost',
        user='root',
        password='',
        db='chenji',
        charset='utf8',
        cursorclass=pymysql.cursors.DictCursor,
    )
    # 模拟登陆
    loginUrl = 'http://online.gxut.edu.cn/cmzx/StudentsMediaCentre.php/Index/login/chengji/1.html'
    # cookie
    cj = cookielib.CookieJar()
    opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
    urllib2.install_opener(opener)
    values = {
        'userName': '201500402079',
        'password': 'xxxxxx',
        'submit': '登入'
    }
    postdata = urllib.urlencode(values)
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36',
        'Referer': 'http://online.gxut.edu.cn/cmzx/StudentsMediaCentre.php/Index/login/chengji/1.html',
        'Cookie': 'PHPSESSID=0pa9gpq62pi6hvcf8018b77hg0'
    }
    request = urllib2.Request(loginUrl, postdata, header)
    print (postdata)
    response = urllib2.urlopen(request)
    print response.getcode()
    html_cont = response.read()
    print html_cont
    soup = BeautifulSoup(html_cont, 'html.parser', from_encoding='utf-8')
    arr = soup.find(id="biaoge").find_all("td")
    cj = []
    for x in arr:
        ch = x.get_text()
        print ch
        strings = ch
        cj.append(strings)
        if len(cj) == 14:
            try:
                with connection.cursor() as cursor:
                    sql = "INSERT INTO cj(xh, student, semester, classname, leixing, xuefen, pingshi, mid, qimo, total, xz, point, classcode, shic)VALUES (%s, %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"
                    cursor.execute(sql, (cj[0], cj[1], cj[2], cj[3], cj[4], cj[5], cj[6], cj[7], cj[8], cj[9], cj[10], cj[11], cj[12], cj[13]))
                    connection.commit()
            finally:
                cj = []
                print "insert succeed!"
                pass
    

    (五)个人感悟
    1.因为是刚开始学习爬虫知识,各种不懂,到处碰壁,可能一个小小的、很简单的点儿,在我的手里都要琢磨很久——对知识不了解,反复反复,一次又一次的error,一个一个地去百度,甚至一天下来,什么也解决,内心里都要快气炸了,有一种对自己“恨铁不成钢”的感觉,但是还是一次次选择去解决。
    2.从学习这个装了很多软件,很多版本,或许Python的2.x和Python的3.x的不同吗,让我在安装第三方插件的时候,就匹配的这个问题上吃了一些苦头。让我想起那天,毕业的学长在实验室的一句话“先有广度,才有深度”。趁着自己年轻,多去接触不同的东西,无论是生活方面的,还是专业知识的,对自己都有很大的帮助!

                                                                            2017.7.22     六

    相关文章

      网友评论

          本文标题:Python爬虫登录查询并抓取学生成绩

          本文链接:https://www.haomeiwen.com/subject/pfaukxtx.html