.NET抓取Web网页数据分析实例
下面程序自动的读取网页显示的信息,类似于爬虫程序。比方说我们有一个系统,要提取BaiDu网站上歌曲搜索排名。分析系统在根据得到的数据进行数据分析。为业务提供参考数据。
为了完成以上的需求,我们就需要模拟浏览器浏览网页,得到页面的数据在进行分析,最后把分析的结构,即整理好的数据写入数据库。那么我们的思路就是:
1、发送HttpRequest请求。
2、接收HttpResponse返回的结果。得到特定页面的html源文件。
3、取出包含数据的那一部分源码。
4、根据html源码生成HtmlDocument,循环取出数据。
5、写入数据库。
程序如下:
//根据Url地址得到网页的html源码
private string GetWebContent(string Url)
{
string strResult="";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//声明一个HttpWebRequest请求
request.Timeout = 30000;
//设置连接超时时间
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);
strResult = streamReader.ReadToEnd();
}
catch
{
MessageBox.Show("出错");
}
return strResult;
}
为了使用HttpWebRequest和HttpWebResponse,需填名字空间引用
private void button1_Click(object sender, EventArgs e)
{
//要抓取的URL地址
string Url = "http://list.mp3.baidu.com/topso/mp3topsong.html?id=1#top2";
为了完成以上的需求,我们就需要模拟浏览器浏览网页,得到页面的数据在进行分析,最后把分析的结构,即整理好的数据写入数据库。那么我们的思路就是:
1、发送HttpRequest请求。
2、接收HttpResponse返回的结果。得到特定页面的html源文件。
3、取出包含数据的那一部分源码。
4、根据html源码生成HtmlDocument,循环取出数据。
5、写入数据库。
程序如下:
//根据Url地址得到网页的html源码
private string GetWebContent(string Url)
{
string strResult="";
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
//声明一个HttpWebRequest请求
request.Timeout = 30000;
//设置连接超时时间
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);
strResult = streamReader.ReadToEnd();
}
catch
{
MessageBox.Show("出错");
}
return strResult;
}
为了使用HttpWebRequest和HttpWebResponse,需填名字空间引用
using System.Net;
以下是程序具体实现过程:
private void button1_Click(object sender, EventArgs e)
{
//要抓取的URL地址
string Url = "http://list.mp3.baidu.com/topso/mp3topsong.html?id=1#top2";
}
=========================用正则表达式抓table的 分割线=============================================================
const string MarketPriceUrlString = "http://www.kitco.com/market/";
/// <summary>
/// Retrieves the market price.
/// </summary>
public void RetrieveMarketPrice()
{
using (WebClient client = new WebClient())
{
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows 6.1.7600;)");
using (Stream data = client.OpenRead(MarketPriceUrlString))
{
using (StreamReader reader = new StreamReader(data))
{
string s = reader.ReadToEnd();
// TODO: retrieve the price data from the string
string articleregex = @"<table border=""0"" cellspacing=""1"" cellpadding=""0"" align=""center"" width=""540"">([\w\W]*?)</table>";//
Regex article = new Regex(articleregex, RegexOptions.IgnoreCase);
Match articlematch = article.Match(s);
if (articlematch.Success == true)
{
string tableString = articlematch.Groups[0].Value;
articleregex = @"<tr ([\w\W]*?)</tr>";
article = new Regex(articleregex, RegexOptions.IgnoreCase);
articlematch = article.Match(tableString);
if (articlematch.Success == true)
{
for (int i = 3; i < articlematch.Groups.Count; i++)
{
string trString = articlematch.Groups[i].Value;
}
}
}
//using (DataAccess.MarketPriceDataContext dc = new DataAccess.MarketPriceDataContext())
//{
// // TODO: write the price data to the database
//}
}
}
}
}
浙公网安备 33010602011771号