OJ系统爬虫总结

本文介绍了作者为导出在线编程系统OJ的学生代码而进行的爬虫实践,包括验证码提取、模拟登录、数据抓取等步骤,强调了opener在爬虫中的便利性,并分享了代码实现细节。
摘要由CSDN通过智能技术生成

背景

最近导师让我帮他把OJ系统上的学生代码导出来,怎知系统并没有一键导出的功能,无奈只能对着百度众多繁杂的教程咬咬牙爬虫,折腾了1天半总算搞出来交差了。

需求

1.提取验证码
2.模拟登陆
3.提取学生账号(学号)stuID、运行编号runID、题目编号pID.,构成学生代码提交页面的链接link
4.根据链接link提取学生提交的代码
5.匹配merge学号和学生姓名
6.保存每位学生的代码到本地,并且以学生姓名命名文件夹

总结

总结出以下几点:

  1. opener是一个好东西,一开始将cookie绑定到opener里面,后面都无需麻烦了
  2. 构造request请求,post方法代码如下
response=opener.open(postURL,postdata) #如果是get方法的话就无需第二个参数
content=response.read().decode()
print(content) #查看post登陆结果

3.读取excel文件:

pd.read_excel('d:/stulist.xlsx', sheetname='stulist',dtype=str)

4.抓包遇到有验证码,顺藤摸瓜找出验证码的网址,用opener访问验证码地址,获取cookie,将验证码保存到本地再读进来显示出图像来。
5.正则表达式问号需要加斜杆转义
6.如何转到下一页:抓取下页网址信息,继续往下爬,直到末页跳出while循环
7.用try-except可以在报错之后继续执行下去
8.一开始不懂,看了很多教程后,拼凑代码,一会儿用opener,一会儿用requests,结果浪费很多时间,爬虫框架很多,建议用的话只用一个就行,既然opener这么容易,以后我就专门用它好了。

代码:

# -*- coding: utf-8 -*-
"""
Created on Tue Jul 10 15:01:36 2018

@author: Administrator
"""


from http import cookiejar
import urllib.request
import re  
import pandas as pd
import os
import urllib.parse
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

stulist=pd.read_excel('d:/stulist.xlsx', sheetname='stulist',dtype=str)


orginURL="http://116.56.140.75:8000/JudgeOnline/"
cid=1117
vcodeURL=orginURL+"vcode.php"
postURL=orginURL+"login.php"
statusURL=orginURL+'status.php'
page_URL= statusURL+'?problem_id=&user_id=&cid='+str(cid)+'&language=-1&jresult=-1&showsim=0'

#将cookie绑定到一个opener里,cookie由cookielib自动管理
cookie=cookiejar.CookieJar()
handler=urllib.request.HTTPCookieProcessor(cookie)
opener=urllib.request.build_opener(handler)
#根据抓包信息,构造头文件headers
opener.addheaders=[
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值