注:以下代码只能在linux下运行

引言

之前看到github上ruanxingzhi dalao的bzojch(BZOJ离线版)项目觉得很厉害,把bzoj的题目全部都爬到本地了,虽然没有数据但是也让我们这些蒟蒻能看权限题了。

显然我们需要一个爬虫来把网页爬下来。

对于python我是一无所知,所以我选择了linux的shell。

运用ubuntu自带的wget工具来下载

代码

非常简单的代码:

#!/bin/bash
pid=1000;
#pid是开始爬的题号

top=5057;
#top是最后一题的题号
#程序会爬区间[pid,top]内的所有题目下来

path="http://www.lydsy.com/JudgeOnline/problem.php?id="
#题目路径公共前缀

echo "请输入bzoj用户名:";
read user_id;

echo "请输入bzoj密码:";
stty -echo
read password;
stty echo

wget --post-data="user_id=$user_id&password=$password" --save-cookies="./cookies.txt" --keep-session-cookies "http://www.lydsy.com/JudgeOnline/login.php"
#登录并获取cookies

rm ./login.php
#删除没用的文件

while [ $pid -le $top ]; do
    echo "------------Getting Problem:$pid------------";
    wget -p -np -k --load-cookies="./cookies.txt" $path$pid;
    echo $pid"done.";
    let pid=pid+1;
done

代码中写好了注释,所以代码是什么意思我就不讲了。

爬虫虽然短,但是功能强大,能把题目爬取下来,而且还能把题目的图片爬取下来,再把那些指向原图的图片链接指向本地。

具体用法:

先把上面的代码写到一个shell脚本中去。

比如先新建一个文件:get_bzoj.sh

然后用gedit编辑那个文件,把上面的代码复制进去,保存。

然后在get_bzoj.sh所在的目录中打开终端,执行:

chmod +x ./get_bzoj.sh

然后再执行命令:

./get_bzoj.sh

就发现我们打开了爬虫,要求输入bzoj的用户名和密码,也就是你在bzoj上注册的用户名和密码。

这里要注意,如果要爬取权限题,你需要用权限号登录。

然后就开始愉♂快地爬取题目啦!

你会发现get_bzoj.sh所在的目录下出现了一个叫做www.lydsy.com的文件夹,里面有个叫JudgeOnline的文件夹,打开里面就有很多网页,格式都是:problem.php?id=????这样的,那么你把????改成你想看的题的题号就行啦!

具体自己琢磨吧。


分享至ヾ(≧∇≦*)ゝ:
分类: 所有

XZYQvQ

炒鸡辣鸡的制杖蒟蒻一枚QvQ

发表评论

电子邮件地址不会被公开。 必填项已用*标注

你是机器人吗? =。= *