〇、前言
一直想自己搭建一个OJ平台,以后或许可以给学校用,正在依次学习需要的知识。OJ平台需要题库,打算先从已有的OJ平台上抓下来,方便实验。
当然,能拿到的只有题目,测试点数据目前看来还是需要自己造咯。
学习python和爬虫有一段时间了,于是乎打算用python写个小爬虫抓题库。
OJ平台选择了大学课程上老师指定的信息学奥赛一本通(C++)版在线测评网站(其实还有一个原因是他的网站设计相对简单,数据好拿一点)。
一、踩点
网站非常简洁(lou),不登录也可以看到题目。
url里传递数据“pid=”后面的数字就是题目的编号,从1000开始。
我们需要的数据是一道题目的“编号”、“题目名称”、“题目描述”、“输入”、“输出”、“输入样例”、“输出样例”、“提示”(部分题目中有这一项)。这个OJ中“来源”写的都是“NO”,对我们意义不大,就不抓他了。
这里想到需要注意的部分:
1.可能会有图片。
2.部分题目有“提示”这一块内容。
F12查看我们需要的数据的部分,写的不是很整齐,包含关系有点混乱。
二、抓取数据
这里用requests.get抓取网站。
复制题目的url,先随便写个合理的pid,到时候外层套个循环就能抓所有题目了。按照规范构造个headers模拟浏览器。
urls = 'http://ybt.ssoier.cn:8088/problem_show.php?pid=%d'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
req = re