项目背景
我们可以通过爬虫来模拟登录来查询自己的成绩,这其中最重要的就是登录这个关卡,只要通过了,就可以方便的查询自己的成绩了。但是我们还是要在 法律的允许条件下
爬取数据,下列的代码已进行隐私处理,并不针对任何组织。
爬虫分析
通过抓包,发现登录需要提交
学号
、密码
、验证码
、VIEWSTATE
通过分析发现 其中的
VIEWSTATE
参数就在网页中,所以我们可以通过正则表达式匹配出来
爬虫项目结构
import re import requests class API(object): ... class Tool(object): ...
API 类
· 通过抓包,知道了以下接口
class API(object): # 登录页 GET_INDEX = "http://XXXXXXXX:XXXX/" # 获取验证码 GET_YZM_URL = 'http://XXXXXXXX:XXXX/CheckCode.aspx' # 登录 POST_LOGIN = 'http://XXXXXXXX:XXXX/default2.aspx'
Tool 类
class Tool(object): session = requests.session() VIEWSTATE = "" # 获取 VIEWSTATE 参数 @classmethod def getHtml(cls): response = cls.session.get(API.GET_INDEX).text cls.VIEWSTATE = re.search(r'__VIEWSTATE" value="(.*?)" />', response).group(1) # 下载验证码在当前路径 @classmethod def download_yzm(cls): yzm_image = cls.session.get(url=API.GET_YZM_URL) with open("yzm.jpg", 'wb') as file: file.write(yzm_image.content) # 登录方法 @classmethod def login(cls, account, pwd, yzm): data = { "__VIEWSTATE": cls.VIEWSTATE, "TextBox1": account, "TextBox2": pwd, "TextBox3": yzm, "RadioButtonList1": "%D1%A7%C9%FA", "Button1": "", } response = cls.session.post(url=API.POST_LOGIN, data=data) response.encoding = response.apparent_encoding response = response.text try: message = re.search(r">alert\('(.*?)'\);</script>", response).group(1) except: # 登录成功 跳转到详情页 xm = re.search(r'<span id="xhxm">(.*?)同学</span>', response).group(1) print("欢迎" + xm + "登录成功") else: # 打印出登录失败信息 print(message)
主函数
def main(): t = Tool() # 实例化类 t.getHtml() # 获取 VIEWSTATE t.download_yzm() # 下载验证码 account = input("请输入你的学号:") pwd = input("请输入你的密码:") yzm = input("请输入验证码:") t.login(account,pwd,yzm) # 运行登录方法
版权声明:《 Python爬虫项目:模拟登录正方系统 》为明妃原创文章,转载请注明出处!
最后编辑:2019-10-28 14:10:55