C#获取百度新歌TOP50
先上软件效果图
代码如下
1.根据Url地址得到网页的html源码
public static string GetWebContent(string Url)
{
string strResult = "";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//声明一个HttpWebRequest请求
request.Timeout = ;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.GetEncoding("GB2312");
StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);
strResult = streamReader.ReadToEnd();
}
catch
{
MessageBox.Show("出错");
}
return strResult;
}
2.根据元素判断是否使用了指定名字的样式,此方法有不妥之处,请大师指点
之所以重写是因为li.GetAttribute("class")获取不到例如,<a class=style1>这种没有引号的格式,所以就自己写了一个,检索不是很规范,
bool ContaintClass(HtmlElement li, string ClassName)
{
string Html = li.OuterHtml;
string str = Html.Substring(, Html.IndexOf('>')-);
if (str.Contains(ClassName))
return true;
else
return false;
}
3.使用
private void btn_GetList_Click(object sender, EventArgs e)
{ DataTable dt = new DataTable();
dt.Columns.Add("OrderID");
dt.Columns.Add("MusicName");
dt.Columns.Add("Singer"); string DataURL = (string)txt_DataURL.SelectedValue;
if (String.IsNullOrEmpty(DataURL))
{
MessageBox.Show("数据来源不能为空!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
string StrWebContent = GetHTMLContent.GetWebContent(DataURL); int ListStart = StrWebContent.IndexOf("<div class=\"top-list-item\">");
int ULStart = StrWebContent.IndexOf("<ul", ListStart);
int ULEnd = StrWebContent.IndexOf("</ul>", ULStart); string strweb = StrWebContent.Substring(ULStart, ULEnd); //生成HtmlDocument
WebBrowser webb = new WebBrowser();
webb.Navigate("about:blank");
HtmlDocument htmldoc = webb.Document.OpenNew(true);
htmldoc.Write(strweb);
HtmlElementCollection htmlli = htmldoc.GetElementsByTagName("li"); string ClassName_OrderID = "index-num";
string ClassName_SontTitle = "song-title";
string ClassName_Singer = "singer"; string[] ClassNames = new string[] { ClassName_OrderID, ClassName_SontTitle, ClassName_Singer }; foreach (HtmlElement li in htmlli)
{ HtmlElementCollection htmlSpan = li.GetElementsByTagName("span"); string[] musicInfo = new string[]; int i = ;
int InfoIndex = ;
while (i >= && i < htmlSpan.Count)
{
if (ContaintClass(htmlSpan[i], ClassNames[InfoIndex]))
{
musicInfo[InfoIndex] = htmlSpan[i].InnerText;
InfoIndex++;
if (InfoIndex > ) break;
}
i++; }
DataRow dr = dt.NewRow();
dr["OrderID"] = musicInfo[];
dr["MusicName"] = musicInfo[];
dr["Singer"] = musicInfo[];
dt.Rows.Add(dr); }
dataGridView1.DataSource = dt; }
代码都很简单
C#获取百度新歌TOP50的更多相关文章
- 用python实现的百度新歌榜、热歌榜下载器
首先声明,本工具仅仅为学习之用,不涉及版权问题,因为百度音乐里面的歌曲本身是可以下载的,而且现在百度也提供了”百度音乐播放器”,可以通过这个工具进行批量下载. 我当时做这个工具的时候,百度还没有提供” ...
- 抓包获取百度音乐API
这次抓包是获取手机APP中的数据包,共分为三个部分: 1.win7建立wifi 2.PC架设代理服务器 手机设置代理 3.抓包分析 一.win7建立wifi 在win7下搭建wifi非常简单,网上的教 ...
- Python学习-使用Python爬取陈奕迅新歌《我们》网易云热门评论
<后来的我们>上映也有好几天了,一直没有去看,前几天还爆出退票的事件,电影的主题曲由陈奕迅所唱,特地找了主题曲<我们>的MV看了一遍,还是那个感觉.那天偶然间看到Python中 ...
- 周董新歌搞崩QQ,抓取20W评论看看歌迷在说啥
9 月 16 日晚间,周董在朋友圈发布了最新单曲<说好不哭> 发布后,真的让一波人哭了 一群想抢鲜听的小伙伴直接泪奔 因为 QQ 音乐直接被搞崩了 没想到干翻 QQ 音乐的不是网易云音乐 ...
- 基于 Golang 完整获取百度地图POI数据的方案
百度地图为web开发者提供了基于HTTP/HTTPS协议的丰富接口,其中包括地点检索服务,web开发者通过此接口可以检索区域内的POI数据.百度地图处于数据保护对接口做了限制,每次访问服务,最多只能检 ...
- 许嵩新歌《放肆》发布 && 递归 + Stream+Lambda相遇成树
一.<放肆>如约而至 今早5:00在迷迷糊糊中醒来,打开手机一看,许嵩又发新歌了,名字叫做<放肆>,澎湃的旋律,依旧古典高雅的用词,这个大男孩,已经不像12年那时候发些伤感非主 ...
- [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒
前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...
- CNZZ公告:近期无法获取百度关键词
今天登录cnzz网站统计,出现一条公告,说是“关于近期无法获取百度关键词的公告”,内容如下: 近日部分用户反馈百度搜索词流量出现不同程度的下降.经排查,是由于百度搜索引擎调整了URL规则,取消了来源U ...
- 获取百度地图POI数据三(模拟关键词搜索)
上一篇博文中讲到如何获取用于搜索的关键词,并且已经准备好了一百五十万的关键词 这其中有门牌号码,餐馆酒店名称,公司名称,道路名称等.有了这些数据,我们就可以通过代码,模拟我们在百度地图的搜索框中搜 ...
随机推荐
- Deep Learning 深度学习 学习教程网站集锦(转)
http://blog.sciencenet.cn/blog-517721-852551.html 学习笔记:深度学习是机器学习的突破 2006-2007年,加拿大多伦多大学教授.机器学习领域的泰斗G ...
- Azure Deploy
http://msdn.microsoft.com/en-us/library/dn408531.aspx https://www.windowsazure.com/en-us/documentati ...
- 视频处理控件TVideoGrabber中如何混合多个视频源(1)
其实一个或是几个作为普通的视频源使用的TVideoGrabber组件,可以进行混合来作为一个TVideoGrabber组件使用,这些普通的组件可以是视频捕捉设备或是视频剪辑等.同时这个混合的组件独立于 ...
- django view使用学习记录
判断用户是否登录 request.user.is_authenticated()auth.authenticate(username=username, password=password)
- Linux设备驱动工程师之路——内核链表的使用【转】
本文转载自:http://blog.csdn.net/forever_key/article/details/6798685 Linux设备驱动工程师之路——内核链表的使用 K-Style 转载请注明 ...
- 【secureCRT】会话保存的路径
- TI CC2541的中断优先级设置.
实际看到的中断优先级设置是这样的:
- 【jqGrid for ASP.NET MVC Documentation】.学习笔记.6.分层
1 两级分层 每个父 grid 的行,都能有子 grid .这被叫做 层次,它用来显示相关的 表,主信息 –> 明细信息等. } 一旦你为 父子 grid 都定义了 Models ,下一步就是设 ...
- C#:WiFi
写的一个简单启动关闭WiFi的类:具体如下 using System; using System.Collections.Generic; using System.Text; using Syste ...
- C++11 std::function用法
转自 http://www.hankcs.com/program/cpp/c11-std-function-usage.html function可以将普通函数,lambda表达式和函数对象类统一起来 ...