最近写的豆瓣红心音乐下载器分析和总结 (C#)
2013-04-05 12:58
323 查看
因为觉得豆瓣FM比较不错,唯一觉得不好的就是不能导出到手机上,虽然手机也有豆瓣,但无奈,缓存只有100m,于是就诞生了写一个豆瓣红心表单下载器的想法。花了还是不少时间的。
过程中遇到的问题如下:
1 验证码问题
首先我们需要提取出红心表单,我用的webbrowser,这个东西吧单线程容易阻塞,造成ui假死,而且是神马STA,好吧,我百度了也没看太懂是啥意思,我就不用多线程呗,反正这个我觉得也比较好资源。但是我发现红心表单的页面是不止一页的,我需要用webbrowser一张张载入,然后提取我想要的信息,也许你会问为什么要用webbrowser,而不用httpwebrequest来提取呢,好吧,开始的时候发现有验证码啊,有木有( 写了一大半的时候,发现其实有的登陆页面不需要验证码),只好加载文档再提取验证码,这个借用了网上的代码,不过我发现对于有javascript效果的验证码,抓不出来,提取出来的标签是空的,这个一直没搞明白js的验证码怎么提取。
2 webbrowser 同步问题
我懒得去纠结这个问题了,由于我抓取的红心页面不直一张,我必须找出所有的链接,一张张加载,如何同步呢,用的定时器,设置个标志位进行同步就好了,文档的处理要放在documentcomplet,事实证明效果还不错哈。。上图。
3.歌曲列表已经提取出来了。剩下的就是要获取歌曲的链接。
应该可以直接抓到豆瓣的歌曲链接吧。不过我没研究过,直接抓百度吧
首先要解决的是表单提交问题<未完待续>
过程中遇到的问题如下:
1 验证码问题
首先我们需要提取出红心表单,我用的webbrowser,这个东西吧单线程容易阻塞,造成ui假死,而且是神马STA,好吧,我百度了也没看太懂是啥意思,我就不用多线程呗,反正这个我觉得也比较好资源。但是我发现红心表单的页面是不止一页的,我需要用webbrowser一张张载入,然后提取我想要的信息,也许你会问为什么要用webbrowser,而不用httpwebrequest来提取呢,好吧,开始的时候发现有验证码啊,有木有( 写了一大半的时候,发现其实有的登陆页面不需要验证码),只好加载文档再提取验证码,这个借用了网上的代码,不过我发现对于有javascript效果的验证码,抓不出来,提取出来的标签是空的,这个一直没搞明白js的验证码怎么提取。
2 webbrowser 同步问题
我懒得去纠结这个问题了,由于我抓取的红心页面不直一张,我必须找出所有的链接,一张张加载,如何同步呢,用的定时器,设置个标志位进行同步就好了,文档的处理要放在documentcomplet,事实证明效果还不错哈。。上图。
private void DocumentComplet(object sender, WebBrowserDocumentCompletedEventArgs e) { if (e.Url.ToString().CompareTo(loginpage) >= 0) { pictureBox1.Image = GetRegCodePic(webBrowser1, "", "", "captcha"); label6.Text = CheckLogin(webBrowser1.Document); return; } if (e.Url.ToString() == mainpage)//主页跳转到信息页 { webBrowser1.Navigate(infopage); label6.Text = "登陆成功,正在获取信息"; bSubmit.Enabled = false; return; } if (e.Url.ToString() == infopage) { webBrowser1.Navigate("http://douban.fm/mine?start=0&type=liked"); return; } else { if (e.Url.ToString() != loginpage) { if (pageget == 0)// 获取红心表单网页信息 { GetInfo(webBrowser1.Document); pageget = 1;//关闭此条件 timer1.Interval = 50; timer1.Start(); } else { HtmlDocument docu = webBrowser1.Document; HtmlElementCollection coll = docu.GetElementsByTagName("p");//得到所有p标签 for (int j = 0; j < coll.Count; j++) { if (coll[j].GetAttribute("classname") == "song_title") { listBox1.Items.Add(coll[j++].InnerText + " - " + coll[j].InnerText); } } ready = false; } } } }
private void timer1_Tick(object sender, EventArgs e) { if (ready == false) { if (index < count) { webBrowser1.Navigate(pageinfo[index++]); ready = true; } else { timer1.Stop(); label4.Text += listBox1.Items.Count.ToString(); status = true; progressBar1.Maximum = listBox1.Items.Count; } } }
3.歌曲列表已经提取出来了。剩下的就是要获取歌曲的链接。
应该可以直接抓到豆瓣的歌曲链接吧。不过我没研究过,直接抓百度吧
首先要解决的是表单提交问题<未完待续>
相关文章推荐
- C# XML序列化方法及常用特性总结分析
- WCF服务最近经常死掉的原因分析总结
- 最近一直在做C#操作office方面的工作!总结一下!(一)Excel
- vue音乐webApp案例分析总结
- 最近分析数据库问题总结(linux+mysql)
- 最近一直在做C#操作office方面的工作!总结一下!Word(二)
- (一)边做边发表--产销系统之需求分析--------------最近准备在博客上边做边发表一个oa系统,如果做的烂读者别见笑,暂定产销系统asp.net 2.0(C#)+sql2000(b/s)
- 最近总结了很多C#以及Unity的基础知识,分享一下
- 最近一直在做C#操作office方面的工作!总结一下!(一)Excel
- MVC Music Store 在线音乐商店示例分析(15)总结
- 分享D瓜哥最近攒的资料(架构方面)、架构分析与设计、知名网站架构分析:Amazon网站架构学习总结、探索Google App Engine背后的奥秘、Facebook图片存储架构、优酷网架构、YouTube架构
- 最近一直在做C#操作office方面的工作!总结一下!Word(二)
- 豆瓣音乐下载分析
- C++xml文件操作 CMarkup学习方法说明 最近正在研究C++下的XML分析工具CMarkup。初次和XML相遇是基于C#对XML的操作。C#的XmlDocument和XmlNode给我印象
- 系统上线后WCF服务最近经常死掉的原因分析总结
- 最近几种C#使用总结
- C#中堆和栈的区别分析(有待更新总结2)
- 系统上线后WCF服务最近经常死掉的原因分析总结
- 系统上线后WCF服务最近经常死掉的原因分析总结
- C#中堆和栈的区别分析(有待更新总结2)