C# WEB网页内容采集

来源:互联网 发布:ios新浪微博项目源码 编辑:程序博客网 时间:2024/05/17 03:32

当当全新正版图书,9周年店庆,特价销售,全场免运费!

 

抓取Web网页数据分析
通过程序自动的读取其它网站网页显示的信息,类似于爬虫程序。比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名。分析系统在根据得到的数据进行数据分析。为业务提供参考数据。

  为了完成以上的需求,我们就需要模拟浏览器浏览网页,得到页面的数据在进行分析,最后把分析的结构,即整理好的数据写入数据库。那么我们的思路就是:

  1、发送HttpRequest请求。

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

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

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

  5、写入数据库。

程序如下:  

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

       

  1. private string GetWebContent(string Url)   
  2.   
  3.         {   
  4.   
  5.             string strResult="";   
  6.   
  7.             try  
  8.   
  9.             {   
  10.   
  11.                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);   
  12.   
  13.     //声明一个HttpWebRequest请求   
  14.   
  15.                 request.Timeout = 30000;   
  16.   
  17.                 //设置连接超时时间   
  18.   
  19.                 request.Headers.Set("Pragma""no-cache");   
  20.   
  21.                 HttpWebResponse response = (HttpWebResponse)request.GetResponse();   
  22.   
  23.                 Stream streamReceive = response.GetResponseStream();   
  24.   
  25.                 Encoding encoding = Encoding.GetEncoding("GB2312");   
  26.   
  27.                 StreamReader streamReader = new StreamReader(streamReceive, encoding);   
  28.   
  29.                 strResult = streamReader.ReadToEnd();   
  30.   
  31.             }   
  32.   
  33.             catch  
  34.   
  35.             {   
  36.   
  37.                 MessageBox.Show("出错");   
  38.   
  39.             }   
  40.   
  41.             return strResult;   
  42.   
  43.         }   

为了使用HttpWebRequest和HttpWebResponse,需填名字空间引用

  using System.Net;

以下是程序具体实现过程:
  1.  private void button1_Click(object sender, EventArgs e)   
  2.   
  3.         {   
  4.   
  5.             //要抓取的URL地址   
  6.   
  7.             string Url = "<a href="http://list.mp3.baidu.com/topso/mp3topsong.html?id=1#top2";" target="_blank">http://list.mp3.baidu.com/...</a>   
  8.   
  9.             //得到指定Url的源码   
  10.   
  11.    string strWebContent = GetWebContent(Url);   
  12.   
  13.             richTextBox1.Text = strWebContent;   
  14.   
  15.    //取出和数据有关的那段源码   
  16.   
  17.             int iBodyStart = strWebContent.IndexOf("<body", 0);   
  18.   
  19.             int iStart = strWebContent.IndexOf("歌曲TOP500", iBodyStart);   
  20.   
  21.             int iTableStart = strWebContent.IndexOf("<table", iStart);   
  22.   
  23.             int iTableEnd = strWebContent.IndexOf("</table>", iTableStart);   
  24.   
  25.             string strWeb = strWebContent.Substring(iTableStart, iTableEnd - iTableStart + 8);   
  26.   
  27.             //生成HtmlDocument   
  28.   
  29.    WebBrowser webb = new WebBrowser();   
  30.   
  31.             webb.Navigate("about:blank");   
  32.   
  33.             HtmlDocument htmldoc = webb.Document.OpenNew(true);   
  34.   
  35.             htmldoc.Write(strWeb);   
  36.   
  37.             HtmlElementCollection htmlTR = htmldoc.GetElementsByTagName("TR");   
  38.   
  39.             foreach (HtmlElement tr in htmlTR)   
  40.   
  41.             {   
  42.   
  43.                 string strID = tr.GetElementsByTagName("TD")[0].InnerText;   
  44.   
  45.                 string strName = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "MusicName");   
  46.   
  47.                 string strSinger = SplitName(tr.GetElementsByTagName("TD")[1].InnerText, "Singer");   
  48.   
  49.                 strID = strID.Replace(".""");   
  50.   
  51.                 //插入DataTable   
  52.   
  53.                 AddLine(strID, strName, strSinger,"0");   
  54.   
  55.                 string strID1 = tr.GetElementsByTagName("TD")[2].InnerText;   
  56.   
  57.                 string strName1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "MusicName");   
  58.   
  59.                 string strSinger1 = SplitName(tr.GetElementsByTagName("TD")[3].InnerText, "Singer");   
  60.   
  61.                 //插入DataTable   
  62.   
  63.                 strID1 = strID1.Replace(".""");   
  64.   
  65.                 AddLine(strID1, strName1, strSinger1,"0");   
  66.   
  67.                 string strID2 = tr.GetElementsByTagName("TD")[4].InnerText;   
  68.   
  69.                 string strName2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "MusicName");   
  70.   
  71.                 string strSinger2 = SplitName(tr.GetElementsByTagName("TD")[5].InnerText, "Singer");   
  72.   
  73.                 //插入DataTable   
  74.   
  75.                 strID2 = strID2.Replace(".""");   
  76.   
  77.                 AddLine(strID2, strName2, strSinger2,"0");   
  78.   
  79.             }   
  80.   
  81.             //插入数据库   
  82.   
  83.             InsertData(dt);   
  84.   
  85.       
  86.   
  87.             dataGridView1.DataSource = dt.DefaultView;   
  88.   
  89. }   
原创粉丝点击