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

先放效果图:

记一次网页数据抓取经历——杭电ACM离线题库制作_第1张图片


制作过程:

遍历所有页面

不多说,从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离线题库

你可能感兴趣的:(页面抓取)