基于DotNET框架的抓取网页的方式
基于.NET框架的抓取网页的方式,下面是代码实例;
// 请求web页面,获取pageStr
private static string GetWholeHtmlCode(string url)
{
string strHtml = string.Empty;
StreamReader strReader = null;
HttpWebResponse wrpContent = null;
try
{
HttpWebRequest wrqContent = (HttpWebRequest)WebRequest.Create(url);
wrqContent.Timeout = 300000;
wrpContent = (HttpWebResponse)wrqContent.GetResponse();
if (wrpContent.StatusCode != HttpStatusCode.OK)
{
//flgPageRetrieved = false;
strHtml = String.Empty;
}
if (wrpContent != null)
{
strReader = new StreamReader(wrpContent.GetResponseStream(), Encoding.GetEncoding("gb2312"));
strHtml = strReader.ReadToEnd();
}
}
catch (Exception e)
{
//flgPageRetrieved = false;
//strHtml = e.Message;
strHtml = String.Empty;
}
finally
{
if (strReader != null)
{
strReader.Close();
}
if (wrpContent != null)
{
wrpContent.Close();
}
}
return strHtml;
}
通过这个方法的调用可以获取对应的html代码,如:
//采集保存到本地
string strWholeHtml = GetWholeHtmlCode(SiteMapUrl);
那么strWholeHtml这个变量中则保存了我们想要的结果,而紧紧光这样还是不够的,我们需要根据这个变量解析出想要的内容;这里使用到下面的using HtmlAgilityPack;
这是一个国外的html dom操作库,HtmlAgilityPack.dll这个库可以搜索得到,这里就不提供下载链接了。
简单解析实例–>
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(strWholeHtml);
HtmlNodeCollection divlistCollection = doc.DocumentNode.SelectNodes("html[1]/body[1]/div[@class='link']");
这样我们就可以得到所有的class为"link"的div元素了 ^_^,如果我们想要接着获取其中的内容,则可以如下这样:
foreach(HtmlNode node in divlistCollection)
{
string innerHtml = node.InnerHtml;//获取其中html
string outerHtml = node.OuterHtml;//获取包含这个元素标签的这个整体html
string innderText = node.InnerText;//获取其中的纯文本内容;
}
终于好了,就这样吧。