自己动手编写MSDN下载工具
微软msdn一般都会在vs安装包里提供,但是有时候你只需要庞大信息的一个小分支,特定信息只有微软官网才有,vs2010强大的帮助文档也未提供,我遇到这个问题的时候就想用java+jsoup做个下载器解决这个问题,按目录递归下载各个网页拼成整个的html,最后转换成doc。效果还是不错的,我另外生成目录并加到html最前端。我之所以要写这个代码,是因为前两天看到了windbg想看看用法无奈他的帮助信息指向到了微软msdn里,而vs没有这部分内容,仅在在线msdn才有。java代码如下:import java.io.FileOutputStream;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class MSDNDownloader
{
public static String htmldirtree="";//生成目录树
public static String htmlbody="";//拼接章节
public static String urlbase="http://msdn.microsoft.com";//根路径地址
public static String root="/en-us/library/ff551063(v=vs.85).aspx";//windows debugging在msdn的根位置
public static int maxcount=10000;
public static void resolve(String cururl,int curdepth)
{
boolean islastlayer=false;
try
{
if(maxcount-- <= 0)
return;
System.out.println(maxcount);
Document doc=Jsoup.connect(cururl).timeout(0).get();
if(!doc.select("div.toclevel2.current a").isEmpty())
islastlayer=true;
//先添加当前层目录
Element curtitle;
if(islastlayer)
curtitle=doc.select("div.toclevel2.current a").get(0);
else
curtitle=doc.select("div.toclevel1.current a").get(0);
htmldirtree+= "<H"+curdepth+" style=\"margin-left:"+20*curdepth+"px\">";
htmldirtree+= curtitle.text()+"</H"+curdepth+">\n";
System.out.println(curtitle.text());
//再添加当前层内容
htmlbody += doc.select(".topic").toString()+"\n";
if(!islastlayer)
{
//处理下一层
Elements subtitle=doc.select("div.toclevel2 a");
if(!doc.select("div.toclevel2.current a").isEmpty())
{
subtitle.remove(0);
}
for(Element everytitle:subtitle)
{
resolve(everytitle.attr("abs:href"),curdepth+1);
}
}
}
catch(Exception exc)
{
System.out.println("错误!");
//System.exit(0);
}
}
public static void main(String[] args)
{
try
{
resolve(urlbase+root,1);
FileOutputStream fs=new FileOutputStream("result.htm");
String html="<!DOCTYPE html>\n<html>\n<head><title>result</title></head>\n<body>\n<font color=0x00ffff>\n";
html += htmldirtree+"\n</font>\n"+htmlbody+"\n</body>\n</html>";
fs.write(html.getBytes());
fs.close();
}
catch(Exception exc)
{
System.out.println("错误!");
System.exit(0);
}
}
}
以上代码比较厉害,不过由于手机网络限制始终没有直接运行,我找仅仅了一个子目录运行,就生成了5M的html(见过这么大的没),
以下是部分目录:
Debugger Reference
Command-Line Options
CDB Command-Line Options
KD Command-Line Options
WinDbg Command-Line Options
DbgSrv Command-Line Options
KdSrv Command-Line Options
DbEngPrx Command-Line Options
KDbgCtrl Command-Line Options
DbgRpc Command-Line Options
SymStore Command-Line Options
Environment Variables
General Environment Variables
Kernel-Mode Environment Variables
Debugger Commands
页:
[1]