信息学奥赛 python 教程_python抓取信息学奥赛一本通OJ题库

〇、前言

一直想自己搭建一个OJ平台,以后或许可以给学校用,正在依次学习需要的知识。OJ平台需要题库,打算先从已有的OJ平台上抓下来,方便实验。

当然,能拿到的只有题目,测试点数据目前看来还是需要自己造咯。

学习python和爬虫有一段时间了,于是乎打算用python写个小爬虫抓题库。

OJ平台选择了大学课程上老师指定的信息学奥赛一本通(C++)版在线测评网站(其实还有一个原因是他的网站设计相对简单,数据好拿一点)。

一、踩点

YR7rM3.jpg

YR7rM3.jpg

网站非常简洁(lou),不登录也可以看到题目。

fqAZne.jpg

fqAZne.jpg

url里传递数据“pid=”后面的数字就是题目的编号,从1000开始。

我们需要的数据是一道题目的“编号”、“题目名称”、“题目描述”、“输入”、“输出”、“输入样例”、“输出样例”、“提示”(部分题目中有这一项)。这个OJ中“来源”写的都是“NO”,对我们意义不大,就不抓他了。

这里想到需要注意的部分:

1.可能会有图片。

2.部分题目有“提示”这一块内容。

F12查看我们需要的数据的部分,写的不是很整齐,包含关系有点混乱。

eeYjIb.jpg

eeYjIb.jpg

二、抓取数据

这里用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值