使用C#开发蜘蛛网爬虫采集程序(带有源代码)(1)
优采云 发布时间: 2020-08-07 22:46要开发采集器程序,我们必须首先获取网页的HTML代码. Microsoft为我们提供了一种非常方便的方法. 我们可以使用WebClient或WebRequest,HttpWebResponse轻松获得网站页面的HTML代码. 最后,提供了源代码下载.
首先给出一个如何使用WebClient获取HTML代码的示例.
private string getHTML(string strUrl,Encoding encoding)
{
Uri url = new Uri(strUrl);
WebClient wc = new WebClient();
wc.Encoding = encoding;
Stream s = wc.OpenRead(url);
StreamReader sr = new StreamReader(s, encoding);
return sr.ReadToEnd();
}
调用时需要了解页面的编码方法,下面我举一个例子,它不需要知道编码方法. 让我们看一下调用方法:
string html = getHTML("http://www.baidu.com", Encoding.GetEncoding("GB2312"));
下一步就是重点. 使用WebRequest,HttpWebResponse来获取页面的HTML代码,只需要传递一个URL. 编码方法可以由程序分析. 尽管它并不完美,但是大多数网站都可以识别它.
首先使用WebRequest初始化一个实列,然后使用GetResponse请求通过response.StatusDescription返回响应到HttpWebResponse的HttpWebResponse,可以获取编码方法代码,通过分析获取所需的网页编码方法,最后阅读就是HTML代码.
private void getHTMLbyWebRequest(string strUrl)
{
Encoding encoding = System.Text.Encoding.Default;
WebRequest request = WebRequest.Create(strUrl);
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusDescription.ToUpper() == "OK")
{
switch (response.CharacterSet.ToLower())
{
case "gbk":
encoding = Encoding.GetEncoding("GBK");//貌似用GB2312就可以
break;
case "gb2312":
encoding = Encoding.GetEncoding("GB2312");
break;
case "utf-8":
encoding = Encoding.UTF8;
break;
case "big5":
encoding = Encoding.GetEncoding("Big5");
break;
case "iso-8859-1":
encoding = Encoding.UTF8;//ISO-8859-1的编码用UTF-8处理,致少优酷的是这种方法没有乱码
break;
default:
encoding = Encoding.UTF8;//如果分析不出来就用的UTF-8
break;
}
this.Literal1.Text = "Lenght:" + response.ContentLength.ToString() + "
CharacterSet:" + response.CharacterSet + "
Headers:" + response.Headers + "
";
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream, encoding);
string responseFromServer = reader.ReadToEnd();
this.TextBox2.Text = responseFromServer;
FindLink(responseFromServer);
this.TextBox2.Text = ClearHtml(responseFromServer);
reader.Close();
dataStream.Close();
response.Close();
}
else
{
this.TextBox2.Text = "Error";
}
}
通过这种方式,已经获得了网页的HTML代码,下一步是处理链接并过滤掉无用的HTML代码并保留文本内容.