源代码地址 : 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://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
/*************************************/