源代码地址 : http://download.csdn.net/detail/witch_soya/5185926
效果如图
截止今日2013年3月27日10:13:48 还是可以使用的。但是不保证您在看到这篇文章的时候百度已经改变了文档结构。吼吼。那就不要在楼主的帖子底下NC的骂LZSB了,群众的眼睛是雪亮滴~~~
几个月前用爬虫将月之门游戏音乐在线试听的地址爬出来了,发现都存在于百度网盘中,详见 http://blog.csdn.net/witch_soya/article/details/8486213
用了一些办法,没能将文件从百度网盘中批量提出来。后来又过了一段时间,看了一眼百度网盘网页代码,发现挺简单,是我想复杂了。于是写了这个百度网盘文件地址批量转换工具。也没什么牛逼的技术,发上来只希望能对有需要的人有一些帮助。
百度网盘的地址是类似于这样的
http://pan.baidu.com/share/link?shareid=112684&uk=455690558
转换完毕得到的地址可以直接用迅雷去下载的是这样。
http://www.baidupcs.com/file/8d29f2f27f5939fabc7260e23f4739dd?fid=455690558-250528-2069072566&time=1364348891&sign=FDTA-DCb740ccc5511e5e8fedcff06b081203-QEMyAofAasbPaHUkB96JtiPppWQ%3D&expires=8h&sh=1&response-cache-control=private
因为我只是为了下载月之门游戏音乐在百度网盘中的地址,所以没有试过其他的文件地址对不对。但是既然源码都放出来了。大家就自己调试一下了。
流程起始很简单,就是模拟浏览器去访问百度盘的地址,然后提取其中的实际地址,核心函数就是这个
//百度盘地址 http://pan.baidu.com/share/link?shareid=112694&uk=455690558 private string ConvertBaiduPan_Thunder(string strBaiduPan) { if (strBaiduPan == null) { return null; } string strThunder = null; //访问百度盘地址 string strBaiduPanWebPage = MyHttp.GetHtml(strBaiduPan); if (strBaiduPanWebPage == "") { MessageBox.Show("访问地址失败!"+ strBaiduPan); goto End; } //取出 <a class="dbtn cancel b-fr" href="http://www.baidupcs.com/file/8d29f2f27f5939fabc7260e23f4739dd?fid=455690558-250528-2069072566&time=1358472203&sign=FDTA-DCb740ccc5511e5e8fedcff06b081203-E0ZjQ1awurzhDkjhV5c%2BtTN05nA%3D&expires=8h&sh=1&response-cache-control=private" id="downFileButtom"><b>下载(2.44M)</b></a> //匹配正则表达式 <a class="dbtn cancel b-fr" href="http://.*?">*.id="downFileButtom"><b> Regex r = new Regex("<a class=\"dbtn cancel b-fr\" href=\"http://.*?\">*.id=\"downFileButtom\"><b>"); //开始匹配 Match m = r.Match(strBaiduPanWebPage); string strLink = null; while (m.Success) { strLink = m.Groups[0].Value; //提取出其中href的值 http://www.baidupcs.com/file/8d29f2f27f5939fabc7260e23f4739dd?fid=455690558-250528-2069072566&time=1358470090&sign=FDTA-DCb740ccc5511e5e8fedcff06b081203-OiOC3pLc236790OikWTlSsTHWjc%3D&expires=8h&sh=1&response-cache-control=private" id="downFileButtom" Regex r2 = new Regex("http.*\""); //开始匹配 Match m2 = r2.Match(strLink); while (m2.Success) { strLink = m2.Groups[0].Value; strLink = strLink.Replace("&", "&"); // 包含双引号 " id="downFileButtom" strLink = strLink.Replace("\"",""); strLink = strLink.Replace("id=downFileButtom", ""); m2 = m2.NextMatch(); } //从上一个匹配结束的位置开始下一个匹配 m = m.NextMatch(); strThunder = strLink; } End: return strThunder; }
/*************************************/
witch_soya 2013年3月27日10:03:25
/*************************************/