关于分析的过程和思路参考原来的一篇文章 《HtmlAgilityPack 爬虫批量获取百度音乐下载地址一》

http://blog.csdn.net/witch_soya/article/details/8316194

源代码下载地址  C#获取百度音乐地址源码

首先在工程中添加引用 HtmlAgilityPack.dll

定义一首歌曲的结构

public class sMp3{public sMp3() { }public string strSid;//sidpublic string strDownPage;//下载页面public string strEdition;//专辑名称public string strSinger;//歌手名称public string strUrl;//下载地址}

在一个列表中存放所有需要解析的歌曲地址

List<sMp3> listSongs = new List<sMp3>();

新建一个HtmlAgilityPack.HtmlDocument对象 用来获取和解析HTML页面
HtmlAgilityPack.HtmlDocument hdoc_Main = new HtmlAgilityPack.HtmlDocument();

定义需要操作的XPath路径

 //主页string Baidu_Music_MainPage_strUrl   = "http://music.baidu.com/";string Baidu_Music_MainPage_Label    = "a";string Baidu_Music_MainPage_Value    = "sid";string Baidu_Music_MainPage_strXpath = "./html[1]/body[1]/div[4]/div[1]/div[1]/div[2]/div[3]/div[1]/div[1]";//下载的页面 如 http://music.baidu.com/song/31496563/downloadstring Baidu_Music_DownMusic_strXpath="./html[1]/body[1]/div[1]/div[4]";         string Baidu_Music_DownMusic_Label   = "a";string Baidu_Music_DownMusic_Value   = "href";string Baidu_Music_DownMusic_strXpath_Title = "./html[1]/body[1]/div[1]/div[2]";         string Baidu_Music_DownMusic_Title   = "title";

至于这些Xpath路径是怎么来的..可以通过查看源代码的方式,.也可以通过我之前发布的XPath工具(XPathTool)来查看得到。

XpathTool介绍地址  http://blog.csdn.net/witch_soya/article/details/8486893

XPathTool下载地址  http://download.csdn.net/detail/witch_soya/4978587

核心函数之一 :getLabelVal  这个函数接受一个 HtmlAgilityPack.HtmlDocument,实际上就是指定了要解析的HTML文件,strXpath是指定的Xpath语句,这样就能通过Xpath截取HTML中一部分内容了。然后通过 strLabel和strValue 两个参数在截取出来的内容中提取需要的指定标签的指定属性值。比如  HtmlAgilityPack.HtmlDocument 加载了一个html文档,通过strXpath就获取了该HTML文档中的一个区域  如果指定strLabel为 “a”strValue为”href”那么,返回的Arraylist就是该区域中a标签的所有超链接地址

private ArrayList getLabelVal(HtmlAgilityPack.HtmlDocument dc, string strXpath, string strLabel, string strValue){ArrayList Arr_Label_Val = new ArrayList();//获取指定的节点HtmlNode node = dc.DocumentNode.SelectSingleNode(strXpath);if (node == null){return null;}string strXPathLabel_Val = "descendant::" + strLabel;#region try{//HtmlNodeCollection atts  = node.SelectNodes("//*[@background or @lowsrc or @src or @href]");//这样得到的是基于全文的//HtmlNodeCollection hrefs = node.SelectNodes("//a[@href]");//这样得到的是基于本节点的                                HtmlNodeCollection hrefs = node.SelectNodes(strXPathLabel_Val);if (hrefs == null){return null;}foreach (HtmlNode href in hrefs){if (href.Attributes[strValue] == null){continue;}//这里得到了歌曲的sidString strSid = href.Attributes[strValue].Value;Arr_Label_Val.Add(strSid);                    }}catch (System.Exception ex){MessageBox.Show(ex.ToString());}finally{// f2.Show();}#endregionreturn Arr_Label_Val;}
//获取百度音乐地址private void button1_Click(object sender, EventArgs e){     HtmlWeb hw = new HtmlWeb();string url = Baidu_Music_MainPage_strUrl;try{hdoc_Main = hw.Load(url);}catch (System.Exception ex){MessageBox.Show(ex.ToString());return;}//解析百度音乐主页面 取得a标签的sid Arr_sid  =  getLabelVal(hdoc_Main,Baidu_Music_MainPage_strXpath, Baidu_Music_MainPage_Label, Baidu_Music_MainPage_Value);if (Arr_sid == null){MessageBox.Show("解析主页面标签错误");return;}for (int i = 0; i < Arr_sid.Count; i++){sMp3 sMp3Song = new sMp3();                sMp3Song.strSid = Arr_sid[i].ToString();//组装地址string strDownLoadPage = "http://music.baidu.com/song/" + Arr_sid[i] + "/download";sMp3Song.strDownPage = strDownLoadPage;listSongs.Add(sMp3Song);}//解析 下载音乐 网页Thread th = new Thread(DownLoadArrPage);th.Start();}
//解析网页public delegate void MyInvoke(string str1, string str2,string str3);private void DownLoadArrPage(){MyInvoke mi = new MyInvoke(UpdateForm);            HtmlWeb hw = new HtmlWeb();for (int i = 0; i < listSongs.Count(); i++){string strUrl =(listSongs[i].strDownPage).ToString();HtmlAgilityPack.HtmlDocument hdoc_DownPage = hw.Load(strUrl);ArrayList Arr_DownLoadUrl =  getLabelVal(hdoc_DownPage,Baidu_Music_DownMusic_strXpath, Baidu_Music_DownMusic_Label, Baidu_Music_DownMusic_Value);//实际上这个Arry_DownLoadUrl返回的只有一条超链接数据 不用遍历了。listSongs[i].strUrl = Arr_DownLoadUrl[0].ToString();ArrayList Arr_Title = getLabelVal(hdoc_DownPage, Baidu_Music_DownMusic_strXpath_Title, Baidu_Music_DownMusic_Label, Baidu_Music_DownMusic_Title);listSongs[i].strEdition = Arr_Title[0].ToString();listSongs[i].strSinger = Arr_Title[1].ToString();}//Arry_Downloadurl存放的是   /data/music/file?link=http://zhangmenshiting.baidu.com/data2/music/31626527/3149656368400128.mp3?xcode=4b1b6b4117b45f71b5949db22586f5d7 这种内容for (int i = 0; i < listSongs.Count(); i++){string strUrl = (listSongs[i].strUrl).ToString();//正则表达式//@"demo_class.asp\?sort=([^x00-xff]{4})&id\=([a-z0-9]+)";Regex reg = new Regex(@"http://(.*[a-zA-Z0-9_])");var result = reg.Match(strUrl).Groups;foreach (var item in result){//   listSongs[i].strUrl = item;if (item.ToString().Contains("http://") == false){continue;}//将内容添加到列表框 第一个列表框                    this.BeginInvoke(mi, new Object[] { listSongs[i].strEdition,listSongs[i].strSinger, item.ToString() });listSongs[i].strUrl = item.ToString();}}}

代码不多,个人感觉流程还是比较清晰的。就不多说了。供新手参考。

/ *********************witch2013年1月10日9:31:53******************************/

HtmlAgilityPack.dll爬虫获取百度音乐批量下载地址(C#源码)相关推荐

  1. PYTHON 2.7爬虫获取百度音乐文件(按歌手名或歌曲名均可)

    2018.8.3 有点小错误正在修改!!!!    2018.8.6 修正完毕,存在小问题(歌手有多个,会创建多个文件夹)   最近学习了关于python的一点点知识,做出一点点小小程序来帮助自己加深 ...

  2. 获取千千静听歌词下载地址(Delphi) 源码+Demo发布

    之前做过通过千千静听歌词服务器下载歌词(Delphi版) 这个Demo程序,做完之后将主要过程封装在一个单元里了. 现在拿出来吧.也没有什么好保留的,呵呵. 主要封装了两个函数 function Lr ...

  3. python爬虫获取网站销售情况(内置源码)

    在现在这个信息爆炸的时代,要想高效的获取数据,爬虫是非常好用的.而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程: 注:此处猫咪销售网站中的内容本来就可以免费 ...

  4. 获取腾讯视频真实地址php源码,腾讯视频的地址解析下载

    提取视频ID 在播放页源码中,可以找到如下视频信息: var VIDEO_INFO = { title: "咱们相爱吧 第1集", duration: "2746&quo ...

  5. 获取腾讯视频真实地址php源码,解析腾讯视频真实地址 - osc_hajrc28s的个人空间 - OSCHINA - 中文开源技术交流社区...

    解析腾讯视频真实地址 标签(空格分隔): php 分析 1 我们从腾讯视频上找到的网页链接格式是这样的 https://v.qq.com/x/page/b0136et5ztz.html vid = b ...

  6. HtmlAgilityPack 爬虫批量获取百度音乐下载地址一

    2014年8月19日15:26:16 说明:  有些网友发私信或在资源下留言问现在为什么无法抓取百度音乐排行榜了,是不是源代码有问题或代码不全面. 首先感谢你的关注,其次想说这个小工具仅仅是通过抓取百 ...

  7. 一步步分析百度音乐的播放地址,利用Python爬虫批量下载

    百度音乐不需要登录也可以下载?听到这个消息是不是很兴奋呢, 接下来我们打开百度音乐,随便打开一首歌,切换到百度播放页面:如图 我这里用的是Firfox 浏览器,打开firebug 先清空所有的请求,如 ...

  8. 获取Google音乐的详细信息(方便对Google音乐批量下载)

    Google音乐都是正版音乐, 不像百度全部都是盗链, 而且死链也多. 但有一个麻烦就是要下载Google音乐的时候得一个一个的点击下载链接, 进入下载页面再点"下载", 才能下载 ...

  9. 百度mp3批量下载器 v1.0.2.5 绿色不要注册

    百度mp3批量下载器 v1.0.2.5 绿色不要注册 百度mp3批量下载器下载百度音乐排行榜,百度音乐掌门人中的歌曲,操作非常简单,下载过程自动化,免去了在网页上多次点击链接才能下载一首歌曲的痛苦. ...

最新文章

  1. linux密码修改实验
  2. 我们为什么要学Java?Java好在哪?
  3. java webservice 常用_复杂对象类型的WebService高级部分
  4. php基础教程 第八步循环补充
  5. TensorFlow实验(2)
  6. java反射jdk1.8,Java基础----jdk1.8 反射实验
  7. Python3基础语法
  8. 这才是设计 React 的万金油!
  9. attachEvent 与 addEventListener的使用
  10. php数组的几个函数和超全局变量
  11. Torch 的安装与基本用法
  12. paip.提升性能---C#.NET程序内存占用过多以及OutOfMemory解决方法
  13. 基于HTML+CSS+JavaScript制作美食文化网站 ——卡通创意的烧烤(5个页面) html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计
  14. OpenCV-绘制同心圆
  15. Ubuntu16.04 启动项修复
  16. Reporting Services 配置工具
  17. Python学习20230111
  18. ear的英语怎么念_不一样的高阶美式英语视频字母表 - A到I
  19. 组卷与考试系统_题库添加选择题模块
  20. UI设计需要学习哪些软件?

热门文章

  1. Raphael绘制流程图(一),添加可拖动的图形
  2. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java康复系统4y703
  3. 逻辑回归原理以及推导
  4. Origin绘图格式细节
  5. 广播、组播 socket编程
  6. 活动回顾|图扑软件亮相核电数字化技术与应用大会
  7. FX5U系列添加CClink模块并配置参数
  8. 【3D detection】CT3D部分代码的理解
  9. AfterEffect(AE)插件-常规功能开发-创建面板-js脚本开发
  10. Adobe Illustrator软件安装下载