2018.08.30 Update:已经开源在 Github 代码仓库,内置页面美化与首页生成。。。
注:以下代码只能在 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=???? 这样的,那么你把???? 改成你想看的题的题号就行啦!
具体自己琢磨吧。
0 条评论