c# 抓取Web网页数据分析

通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序。为了完成以上的需求,我们就需要模拟浏览器浏览网页,得到页面的数据在进行分析,最后把分析的结构,即整理好的数据写入数据库。

那么我们的思路就是:   

1、发送HttpRequest请求。   

2、接收HttpResponse返回的结果。得到特定页面的html源文件。   

3、取出包含数据的那一部分源码。   

4、根据html源码生成HtmlDocument,循环取出数据。   

5、写入数据库。 程序如下: 

 1 //根据Url地址得到网页的html源码 
 2 private string GetWebContent(string Url) 
 3 { 
 4 string strResult=""; 
 5 try 
 6 { 
 7 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); 
 8     //声明一个HttpWebRequest请求 
 9 request.Timeout = 30000; 
10 //设置连接超时时间 
11 request.Headers.Set("Pragma", "no-cache"); 
12 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
13 Stream streamReceive = response.GetResponseStream(); 
14 Encoding encoding = Encoding.GetEncoding("GB2312"); 
15 StreamReader streamReader = new StreamReader(streamReceive, encoding); 
16 strResult = streamReader.ReadToEnd(); 
17 } 
18 catch 
19 { 
20 MessageBox.Show("出错"); 
21 } 
22 return strResult; 
23 } 
24 为了使用HttpWebRequest和HttpWebResponse,需填名字空间引用 
25   using System.Net; 
26 以下是程序具体实现过程: 
27 private void button1_Click(object sender, EventArgs e) 
28 { 
29 //要抓取的URL地址 
30 string Url = "http://list.mp3.baidu.com/topso/mp3topsong.html?id=1#top2"; 
31 //得到指定Url的源码 
32    string strWebContent = GetWebContent(Url); 
33 richTextBox1.Text = strWebContent; 
34    //取出和数据有关的那段源码 
35 int iBodyStart = strWebContent.IndexOf("<body", 0); 
36 int iStart = strWebContent.IndexOf("歌曲TOP500", iBodyStart); 
37 int iTableStart = strWebContent.IndexOf("<table", iStart); 
38 int iTableEnd = strWebContent.IndexOf("</table>", iTableStart); 
39 string strWeb = strWebContent.Substring(iTableStart, iTableEnd - iTableStart + 8); 
40 //生成HtmlDocument 
41    WebBrowser webb = new WebBrowser(); 
42 webb.Navigate("about:blank"); 
43 HtmlDocument htmldoc = webb.Document.OpenNew(true); 
44 htmldoc.Write(strWeb); 
45 HtmlElementCollection htmlTR = htmldoc.GetElementsByTagName("TR"); 
46 foreach (HtmlElement tr in htmlTR) 
47 { 
48 string strID = tr.GetElementsByTagName("TD")[0].InnerText; 
49 string strName = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "MusicName"); 
50 string strSinger = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "Singer"); 
51 strID = strID.Replace(".", ""); 
52 //插入DataTable 
53 AddLine(strID, strName, strSinger,"0"); 
54 string strID1 = tr.GetElementsByTagName("TD")[2].InnerText; 
55 string strName1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "MusicName"); 
56 string strSinger1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "Singer"); 
57 //插入DataTable 
58 strID1 = strID1.Replace(".", ""); 
59 AddLine(strID1, strName1, strSinger1,"0"); 
60 string strID2 = tr.GetElementsByTagName("TD")[4].InnerText; 
61 string strName2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "MusicName"); 
62 string strSinger2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "Singer"); 
63 //插入DataTable 
64 strID2 = strID2.Replace(".", ""); 
65 AddLine(strID2, strName2, strSinger2,"0"); 
66 } 
67 //插入数据库 
68 InsertData(dt); 
69     
70 dataGridView1.DataSource = dt.DefaultView; 
71 } 
View Code


 

转载于:https://www.cnblogs.com/lanmoxiaozhu/p/3242134.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值