网页源代码抓取工具(如何能够获取到指定网页的源码呢?的小工具)
优采云 发布时间: 2021-10-06 20:18网页源代码抓取工具(如何能够获取到指定网页的源码呢?的小工具)
在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(stringurl)方法正确读取网站的title和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标签继续读取源代码,就可以实现自动爬取的功能。