欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » C# » 正文

热门阅读

如何在C#中获取指定网页源码的示例

创建时间:2011年11月19日 23:25  阅读次数:(36978)
分享到:
在C#中,我们如何能够获取到指定网页的源码呢?比如说我们要做一个文章抓取功能的小工具,这样的功能是必不可少的,小编自己做了一个能够获取网页源码的小工具,把主体代码共享出来,希望能给新手们一点帮助。

首先先看下面代码:
private string GetWebContent(string url)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse respone = (HttpWebResponse)request.GetResponse();
Stream stream = respone.GetResponseStream();

Encoding encoding = Encoding.Default;
if (this.ddlEncoding.SelectedItem != null && this.ddlEncoding.SelectedItem.ToString() != "" && this.ddlEncoding.SelectedItem.ToString() != "Default")
{
encoding = Encoding.GetEncoding(this.ddlEncoding.SelectedItem.ToString());
}

StreamReader streamReader = new StreamReader(stream, encoding);
return streamReader.ReadToEnd();
}

上面方法的功能是把传入参数(url地址)的网页源码返回给调用者,但这仅仅是所有源码,我们并不能从中剥离出网站标题,网站Body元素等,需要正确读到这些元素,我们还要进行下一步处理。
Encoding encoding = Encoding.Default;
if (this.ddlEncoding.SelectedItem != null && this.ddlEncoding.SelectedItem.ToString() != "" && this.ddlEncoding.SelectedItem.ToString() != "Default")
{
encoding = Encoding.GetEncoding(this.ddlEncoding.SelectedItem.ToString());
}
主要用来处理网站的不同编码,不同的网站有不同的编码,如果我们在读取时使用了错误的编码,那么返回结果中的所有汉字就成了乱码了,所以提供了一个供用户自己选择编码的功能,如果读取出源码是错误的,就可以使用另外一种编码再次尝试,ddlEncoding(ComboBox控件)提供了所有网站编码选择。

下面是处理GetWebContent(string url)方法返回的结果,以正确读取出网站的标题,body的元素。
private void button1_Click(object sender, EventArgs e)
{
try
{
if (this.txtUrl.Text.Trim().Length == 0)
{
("请输入主入口地址!");
}
else
{
//这里获取GetWebContent方法的结果
string webContent = GetWebContent(this.txtUrl.Text.Trim());

//声明一个WebBrowser
WebBrowser webBrowser = new WebBrowser();
webBrowser.Navigate("about:blank");

//将GetWebContent方法返回的结果转化为HtmlDocument,就可以正确处理网页中的元素了。
HtmlDocument htmlDoc = webBrowser.Document.OpenNew(true);
htmlDoc.Write(webContent);

//获取网页中Body中的Html代码
string outerHtml = htmlDoc.Body.OuterHtml;
//获取网页的标题
string outerTitle=htmlDoc.Title;

this.txtDocumentTitle.Text = outerTitle;
this.txtDocumentConent.Text = outerHtml;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}

通过上面两个步骤,我们就可以正确的读取指定网页中的各元素了,当然,实际处理时,可能还会遇到很多的问题,比如我们要获取源码的网站需要用户名与密码验证,但处理一般的网页还是足够了。我们还可以从获取到的源码中解析出A标签,然后再根据解析出的A标签继续读取源码,就可以实现自动抓取的功能了。;
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论1条
  • #1楼  评论人:QQ745202244  评论时间:2013-6-17 1:31:55
  • ddlEncoding 是什么啊, 不是太懂 我是小白啊
发表评论:
留言人:
内  容:
请输入问题 31+47=? 的结果(结果是:78)
结  果: