记一次网页数据抓取经历——杭电ACM离线题库制作

来源:互联网 发布:怎么修改手机的mac地址 编辑:程序博客网 时间:2024/05/21 08:41

先放效果图:


制作过程:

遍历所有页面

不多说,从1000到4955题(杭电题目不断增加中)

页面url规则:http://acm.hdu.edu.cn/showproblem.php?pid=<题号>

剔除页面中重复内容

使用JQuery方式选中页面中重复内容,并将其删除掉,从而使题库体积更小、页面更简练。

这里可以使用FireBug的jQuerify插件在控制台来做试验,执行效果一目了然,弄错了刷新一遍即可恢复。

$('body>table>tbody>tr:not(body>table>tbody>tr:eq(3))').remove();

在Java中使用Jsoup包即可完成同样任务。

修改标题

杭电题目页的title的格式是:Problem -  <题号>,很不直观,我希望的格式是:<题号> - <题目名>。

$('title').text(1000 + $('h1').text());

保存

实际上保存并没有什么可说的,只是我使用的库(Jsoup)默认输出的html是经过格式美化的,然而这将会影响页面内容的格式。所以需要设置Jsoup不要进行美化。

其他

为了使制作出来的题库美观,我们还需要css以及背景图片,自行下载即可。

制作CHM文件

使用Easy CHM制作CHM文件,确实很Easy。

源代码:

OutputSettings outputSettings = new OutputSettings();outputSettings.prettyPrint(false);for(int id=1000;id<=4955;id++){// 获取页面Document doc = Jsoup.connect("http://acm.hdu.edu.cn/showproblem.php?pid=" + id).get();// 剔除重复内容doc.select("body>table>tbody>tr:not(body>table>tbody>tr:eq(3)").remove();// 设置标题doc.title(id + " - " + doc.select("h1").text());// 关闭美化doc.outputSettings(outputSettings);// 写入文件FileWriter fw = new FileWriter(doc.title() + ".html");fw.write(doc.html());fw.close();}

下载:

杭电ACM离线题库

0 0
原创粉丝点击