使用Jsoup批量下载code.google.com上的Cocos2dx学习DEMO

懒骨头(http://blog.csdn.net/iamlazybone QQ:124774397 )


网上关于cocos2dx游戏源码的例子太少了

搜了一圈后想去code.google.com上找找

还真不少

估计是用的很老的版本了

不过肯定有值得学习的地方

下了几个觉得手动下载太费劲了

于是乎 骨头动了邪念。。。


骨头最熟悉Java

所以用Java中Jsoup来抓取

这是正在运行中的机器人控制台:

Succeeded connecting to the Database!
Query OK, count=895
List init OK.
============
Start checkout:895
-----------
Project 1 / 895:cocos2d-android
svn checkout http://cocos2d-android.googlecode.com/svn/ /cygdrive/f/GGCodeSvn/ggcode_android_game/1.cocos2d-android
Cost:21 sec.(ALL:21)
-----------
Project 2 / 895:kwaak3
svn checkout http://kwaak3.googlecode.com/svn/ /cygdrive/f/GGCodeSvn/ggcode_android_game/2.kwaak3
Cost:25 sec.(ALL:46)
-----------
Project 3 / 895:andors-trail
svn checkout http://andors-trail.googlecode.com/svn/ /cygdrive/f/GGCodeSvn/ggcode_android_game/3.andors-trail
Cost:118 sec.(ALL:165)
-----------
Project 4 / 895:urho3d
svn checkout http://urho3d.googlecode.com/svn/ /cygdrive/f/GGCodeSvn/ggcode_android_game/4.urho3d
Cost:404 sec.(ALL:569)
-----------


这是本地硬盘

机器人正在努力下载着。。。



======================================

一步步来

1

首先看下code.google.com项目列表页:

https://code.google.com/hosting/search?q=cocos2dx&filter=0&mode=&start=10

参数就是cocos2dx 和 start=10 :关键字和分页

2

右键打开网页源代码:

 <table>
 <tbody>
 <tr>
 <td style="padding-right: 5px;width:50px;"> <a href="/p/brook/"> <img
 style="max-width:50px;max-height:55px"
 src="https://ssl.gstatic.com/codesite/ph/images/defaultlogo.png" /> </a>
 </td>
 <td style="width:650px; padding-bottom:10px"> <a
 onmousedown="return clk(this, 8)" href="/p/brook/"
 style="font-size:medium">brook  -  brook</a> <img width="15"
 height="15" id="star_img"
 src="https://ssl.gstatic.com/codesite/ph/images/star_off.gif"
 style="cursor:pointer" onclick="starClick(this, ‘brook‘);" /> <br /> <span
 style="color:#676767"> Updated: Apr 17, 2012 </span><br /> cocos2dx box2d
 game<br /> <span class="labels"> <a
 href="/hosting/search?q=label:Game">Game</a> </span> </td>
 </tr>
 </tbody>
 </table>
上面就是每个项目的html源码

Jsoup的使用

(1)使用程序拼接的url来下载网页,得到Document

(2)Elements es = doc.getElementsByTag("table"); 使用table标签来得到每个项目的table源码

(3)分析每个项目的html table源码,从中找出每个标签的规律,然后解析:

如下:

			// img
			tempE = e.select("img[style=max-width:50px;max-height:55px]")
					.get(0);
			img = tempE.attr("src");
			if (img.startsWith("/p"))
				img = GGCodeList.hostUrl + img;
			// projectName,url
			tempE = e.select("a[href^=/p/]").get(0);
			projectName = tempE.attr("href");
			projectName = projectName.substring(3, projectName.length() - 1);
			url = GGCodeList.hostUrl + tempE.attr("href");
			// title
			title = e.select("a[onmousedown^=return clk]").get(0).text();

有用select选择的,有用attr属性选择器的,等等,关于Jsoup的用法需要多看几遍。

(4)使用Jdbc连接mysql数据库,将采集到的信息入库

		// 驱动程序名
		String driver = "com.mysql.jdbc.Driver";
		// URL指向要访问的数据库名scutcs
		String url = "jdbc:mysql://" + param.DB_IP + ":" + param.DB_PROT + "/"
				+ param.DB_NAME + "?useUnicode=true&characterEncoding=UTF-8";
		// MySQL配置时的用户名
		String user = param.DB_USER;
		// MySQL配置时的密码
		String password = param.DB_PASSWORD;
		try {
			// 加载驱动程序
			Class.forName(driver);
			// 连续数据库
			conn = DriverManager.getConnection(url, user, password);

骨头用的是wamp集成环境,简单的建个数据库然后往里写刚才抓取到的数据

cocos2dx相关大约60多个项目

(5)使用Java来运行cmd:

Runtime.getRuntime().exec("cmd.exe  /c " + cmdStr);
(6)使用cmd方式来checkout 刚才保存的svn地址

svn checkout http://beginnginandroidgames2.googlecode.com/svn/ /cygdrive/f/GGCodeSvn/ggcode_android_game/69.beginnginandroidgames2
注意:本地地址要使用 cygdrive/f的方式来指定,这也是骨头瞎猜的,直接使用f:/这种格式老搞不定,突然想到前阵子使用cygwin编译cocos2dx时的指定方式。


cocos2dx的几十个项目下载的很顺利

但android game的几百个例子就比较麻烦

偶尔会有连接失败

应该是google服务器连接不稳定的原因

Demo到手

继续学习吧


// 有极少部分项目使用 git ,所以无法下载





郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。