博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#获取百度新歌TOP50
阅读量:6345 次
发布时间:2019-06-22

本文共 3635 字,大约阅读时间需要 12 分钟。

先上软件效果图

 

代码如下

1.根据Url地址得到网页的html源码

1  public static string GetWebContent(string Url) 2         { 3             string strResult = ""; 4             try 5             { 6                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); 7                 //声明一个HttpWebRequest请求 8                 request.Timeout = 30000; 9                 //设置连接超时时间10                 request.Headers.Set("Pragma", "no-cache");11                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();12                 Stream streamReceive = response.GetResponseStream();13                 Encoding encoding = Encoding.GetEncoding("GB2312");14                 StreamReader streamReader = new StreamReader(streamReceive, Encoding.UTF8);15                 strResult = streamReader.ReadToEnd();16             }17             catch18             {19                 MessageBox.Show("出错");20             }21             return strResult;22         }

2.根据元素判断是否使用了指定名字的样式,此方法有不妥之处,请大师指点

  之所以重写是因为li.GetAttribute("class")获取不到例如,<a class=style1>这种没有引号的格式,所以就自己写了一个,检索不是很规范,

bool ContaintClass(HtmlElement li, string ClassName)        {            string Html = li.OuterHtml;            string str = Html.Substring(1, Html.IndexOf('>')-1);            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("
"); int ULStart = StrWebContent.IndexOf("
", 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[3]; int i = 0; int InfoIndex = 0; while (i >= 0 && i < htmlSpan.Count) { if (ContaintClass(htmlSpan[i], ClassNames[InfoIndex])) { musicInfo[InfoIndex] = htmlSpan[i].InnerText; InfoIndex++; if (InfoIndex > 2) break; } i++; } DataRow dr = dt.NewRow(); dr["OrderID"] = musicInfo[0]; dr["MusicName"] = musicInfo[1]; dr["Singer"] = musicInfo[2]; dt.Rows.Add(dr); } dataGridView1.DataSource = dt; }

代码都很简单

转载于:https://www.cnblogs.com/GarsonZhang/p/3236354.html

你可能感兴趣的文章
职业女性:学会减压救自己!
查看>>
OSChina 周一乱弹 —— 这个需求很简单!
查看>>
OSChina 周一乱弹 —— 我当你是朋友,你却……
查看>>
[Android官方API阅读]___<Device Compatibility>
查看>>
如何写出好的产品需求文档(PRD)?
查看>>
Flex Chart
查看>>
Python中实用却不常见的小技巧
查看>>
012# Adempiere系统的贸易流程(一)
查看>>
(一)阅读器客户端开发实战_引言
查看>>
为何禁用MyBatis缓存
查看>>
手机安装 apk 出现“解析包时出现问题”
查看>>
Oracle用户被锁定解决方法
查看>>
485总线的概念
查看>>
我的友情链接
查看>>
web前端笔记
查看>>
import 路径
查看>>
使用optimizely做A/B测试
查看>>
finally知识讲解
查看>>
Matplotlib绘图与可视化
查看>>
openstack ocata版(脚本)控制节点安装
查看>>