<双十一特辑> 模拟登录学校教务处爬取全校女生资料和头像

  1 #-*- coding=utf-8 -*-
  2 import requests
  3 import re
  4 import json
  5 import time
  6 from PIL import Image
  7 import cStringIO
  8 import cookielib
  9 import urllib
 10 import os
 11 import xlrd
 12
 13 from requests.packages.urllib3.exceptions import InsecureRequestWarning,InsecurePlatformWarning
 14 requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
 15 requests.packages.urllib3.disable_warnings(InsecurePlatformWarning)
 16
 17 data=xlrd.open_workbook(‘1.xlsx‘)
 18 table=data.sheet_by_name(u‘Sheet1‘)
 19
 20 message_url=‘https://matrix.dean.swust.edu.cn/acadmicManager/index.cfm?event=studentProfile:DEFAULT_EVENT‘
 21 login_url=‘https://matrix.dean.swust.edu.cn/cas/login‘
 22 topic_url=‘‘
 23 flag=0
 24
 25 student = {}
 26 student = {
 27     ‘学号‘:‘‘,
 28     ‘姓名‘:‘‘,
 29     ‘性别‘:‘‘,
 30     ‘生日‘:‘‘,
 31     ‘pic‘:‘‘,
 32     ‘民族‘:‘‘,
 33     ‘行政班‘:‘‘,
 34     ‘专业‘:‘‘,
 35     }
 36
 37 headers={
 38 ‘User-Agent‘:‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36‘
 39 }
 40
 41 session=requests.Session()
 42 session.headers=headers
 43 session.cookies = cookielib.LWPCookieJar(filename=‘cookies‘)
 44 # try:
 45 #     session.cookies.load(ignore_discard=True)
 46 # except:
 47 #     print u"未登陆过,需先登录"
 48
 49
 50 def get_lt(url="https://matrix.dean.swust.edu.cn/cas/login"):
 51     ‘‘‘‘‘_lt 是一个动态变化的参数‘‘‘
 52     global session
 53     index_url =  url
 54     index_page = session.get(index_url,verify=False)
 55     html = index_page.content
 56     pattern = r‘name="lt" type="hidden" value="(.*?)"‘
 57     lt = re.findall(pattern, html)
 58     return lt[0]
 59
 60 def login(username,password):
 61     global session
 62     global topic_url
 63     global flag
 64     data={
 65     ‘lt‘:get_lt(),
 66     ‘username‘:username,
 67     ‘password‘:password,
 68     ‘service‘:‘https://matrix.dean.swust.edu.cn/acadmicManager/index.cfm?event=studentPortal:DEFAULT_EVENT‘,
 69     }
 70     loginurl=login_url
 71     try:
 72         login_page=session.post(loginurl,data=data)
 73         login_code=login_page.content
 74         pattern=r‘<a class="btn btn-primary" href="(.*?)"‘
 75         real_url=re.findall(pattern, login_code)
 76         topic_url=real_url[0]
 77         flag=1
 78     except:
 79         print ‘error01‘
 80     session.cookies.save()
 81
 82
 83 def isLogin():
 84     global session
 85     url = "https://matrix.dean.swust.edu.cn/acadmicManager/index.cfm?event=studentProfile:DEFAULT_EVENT"
 86     login_code = session.get(url, allow_redirects=False).status_code
 87     if int(x=login_code) == 200:
 88         return True
 89     else:
 90         return False
 91
 92 def get_message():
 93     global session
 94     global topic_url
 95     global message_url
 96     global student
 97
 98     html=session.get(topic_url)
 99     html=session.get(message_url).text
100
101     pattern_ming=r‘<td>(.*?)</td>‘
102     pattern_id=r‘<span class="number">(.*?)</span>‘
103     pattern_pic=r‘<td style="padding:0;" width="135" height="180" valign="middle" align="center" rowspan="6"><img width="135" height="180" align="middle" src="(.*?)" /></td>‘
104     message_name=re.findall(pattern_ming, html)
105     message_pic=re.findall(pattern_pic, html)
106     try:
107         student[‘学号‘]=re.findall(r‘<span class="number">(\d*?)</span>‘, message_name[2])[0]
108     except:
109         pass
110
111     student[‘姓名‘]=message_name[4]
112     student[‘性别‘]=message_name[6]
113     student[‘专业‘]=message_name[37]
114     #student[‘生日‘]=re.findall(r‘<span class="number">(.*?)</span>‘, message_name[8])[0]
115     #student[‘民族‘]=message_name[10]
116     student[‘行政班‘]=message_name[27]
117     student[‘pic‘]=‘https://matrix.dean.swust.edu.cn/acadmicManager/student/profile/‘+student[‘学号‘]+‘.jpg‘
118
119
120 def download():
121     global student
122     global session
123     basepath=os.path.abspath(‘.‘)
124     savepath=os.path.join(basepath,student[‘专业‘])
125     if not os.path.exists(savepath):
126         os.mkdir(savepath)
127     try:
128         picpath=os.path.join(savepath,student[‘姓名‘]+student[‘学号‘]+‘.jpg‘)
129         r=session.get(student[‘pic‘])
130         with open(picpath, "wb") as pic:
131             pic.write(r.content)
132         print u‘>>>>>>>>>成功抓取>>>>>>>>>>>>>>>‘+student[‘姓名‘]
133     except Exception, e:
134         pass
135
136
137 if __name__ == ‘__main__‘:
138     count=table.nrows
139     i=2
140     while(count>0):
141         if(table.col_values(3)[i]==u‘女‘):
142             try:
143                 login(str(int(table.col_values(1)[i])), str(table.col_values(13)[i])[11:17])
144             except:
145                 pass
146         if(flag==1):
147             get_message()
148             download()
149             flag=0
150         count=count-1
151         i=i+1
152         session.cookies.clear()
总结:python处理excel>>  http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.htmlsession释放>>    http://stackoverflow.com/questions/23816139/clear-cookies-from-requests-pytho
注明:
  1.xlsx为提供学生资料的excel
  异常处理之间的妥协关系需要事先计划好
时间: 2024-10-13 03:02:58

<双十一特辑> 模拟登录学校教务处爬取全校女生资料和头像的相关文章

Scrapy 通过登录的方式爬取豆瓣影评数据

Scrapy 通过登录的方式爬取豆瓣影评数据 爬虫 Scrapy 豆瓣 Fly 由于需要爬取影评数据在来做分析,就选择了豆瓣影评来抓取数据,工具使用的是Scrapy工具来实现.scrapy工具使用起来比较简单,主要分为以下几步: 1.创建一个项目 ==scrapy startproject Douban 得到一个项目目录如下: ├── Douban │   ├── init.py │   ├── items.py │   ├── pipelines.py │   ├── settings.py

Python登录豆瓣并爬取影评

上一篇我们讲过Cookie相关的知识,了解到Cookie是为了交互式web而诞生的,它主要用于以下三个方面: 会话状态管理(如用户登录状态.购物车.游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置.主题等) 浏览器行为跟踪(如跟踪分析用户行为等) 我们今天就用requests库来登录豆瓣然后爬取影评为例子,用代码讲解下Cookie的会话状态管理(登录)功能. 此教程仅用于学习,不得商业获利!如有侵害任何公司利益,请告知删除! 一.需求背景 之前猪哥带大家爬取了优酷的弹幕并生成词云图片

模拟登录学校邮箱

要模拟登录的post地址(url),可以先登录一边要登录的网站,用wireshark抓取信息,filter过滤条件为http.request.method==POST. 也可以在Chrome浏览器打开,按f12,点击Network,进行查看. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import

基于nodejs模拟浏览器post请求爬取json数据

今天想爬取某网站的后台传来的数据,中间遇到了很多阻碍,花了2个小时才请求到数据,所以我在此总结了一些经验. 首先,放上我所爬取的请求地址http://api.chuchujie.com/api/?v=1.0: 下面我们开始爬取数据. 一.写一个基于nodejs的爬虫 1.引入所需模块 这里需要引入http模块(nodejs用来向浏览器发送http请求的模块)和querystring模块(把前台传过来的对象形式的参数转化成字符串形式): var http = require("http"

模拟登录学校教务管理系统,获取成绩单!

界面如下: 这个模拟是高仿真学校教务系统的,好处就是,可以快速登陆系统直接获取成绩. 避开了繁琐的查询步骤,和节约了查询的时间,极大的提高了用户的体验. 核心源代码如下: <?php //屏蔽notice信息 error_reporting(E_ALL ^ E_NOTICE); //设置文本头信息 header("Content-Type:text/html;charset=utf-8"); if ( $_REQUEST['xh'] && $_REQUEST['p

记一次爬需要登录之后才能爬取数据的demo

一:工程概况 注意: 二:涉及到的类 package com.bigdata.crawler; import java.io.IOException; import java.util.List; import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; import org.apache.http.client.ClientProtocolException; import org.apache.http.

用scrapy框架爬取映客直播用户头像

1. 创建项目 scrapy startproject yingke cd yingke 2. 创建爬虫  scrapy genspider live 3. 分析http://www.inke.cn/hotlive_list.html网页的response,找到响应里面数据的规律,并找到的位置,通过response.xpath()获取到 4. 通过在pipline里面进行数据的清洗,过滤,保存 5. 实现翻页,进行下一页的请求处理 6. 运行爬虫 scrapy crawl live 说明:这个程

Python爬虫之模拟登录豆瓣获取最近看过的电影

哈哈哈,模拟登录成功啦啦啦啦啦~~~~~ 重要的事本来要说三遍,不过还是算了== 先上效果图: 众所周知,很多网站都设置了登录之后才能获取查看页面的权利,因此模拟登录成了爬取信息的第一步,这一步成功了,嘿嘿,just do it! 好,废话不多说,直接说重点: 首先,你应该要了解网站登录的流程以及你需要post的信息,以豆瓣为例: source:movie redir:https://movie.douban.com/mine?status=collect form_email:username

爬虫第三章 模拟登录

模拟登录 为什么要进行模拟登录 - 有时候我们要进行登录之后,才能爬取到的数据 为什么要识别验证码 - 验证码往往是作为登录中发送的请求参数进行使用的 验证码识别: 借助于一些线上打码平台(超级鹰,云打码,打码兔) 超级鹰的使用流程: - 注册:注册一个<用户中心>身份的账号 - 登录:基于<用户中心>进行登录 - 点击 软件ID -->生成一个软件id - 下载示例代码:点击开发文档->选择python语言->点击下载 代理操作 cookle操作 线程池 实例: