
C#不用WebBrowser直接下载网页HTML源码
要获得和用WebBrowser控件一样的效果
就是用 WebBrowser 连接网页 ,网页自动跳转,自动完成生成代码
然后点右键能获得一个源码 ,我就是要就是这个代码
不用第三方插件或者dll 只用net2.0的内置库
只要是和使用WebBrowser获得的源码一样就可以了
因为是多线程,还要涉及到等待线程,所以不可以多线程生成控件
而且如果可以直接获得源码 也比生成控件之后获得源码要占用资源多一些
<script type="text/javascript" src="http://static.51img1.com/stats/stats_path.js?v=20091224"></script>
<script type="text/javascript" defer="defer">_51ebro.go();</script>
获得的代码都是这些,,,,怎么办?
那为什么用WebBrowser.docment.body却可以获得源码呢? 展开
调用方法:string html=DownloadData("http://www.baidu.com",Encoding.GetEncoding("gb2312"));
public static string DownloadData(string url,Encoding encoding)
{
WebClient web = new WebClient();
return encoding.GetString(web.DownloadData(url));
}
复杂一点用HttpWebRequest/HttpWebResponse:
调用方法:string html=DownloadHtmlPage("http://www.baidu.com",Encoding.GetEncoding("gb2312"),"GET",20);
public static string DownloadHtmlPage(string pageUrl, Encoding encoding, string requestMethod,int timeOut)
{
string value = string.Empty;
HttpWebResponse response=null;
Stream data=null;
StreamReader sr=null;
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(pageUrl);
request.Method = requestMethod;
if (timeOut != -1) request.Timeout = timeOut;
response = (HttpWebResponse)request.GetResponse();
data = response.GetResponseStream();
sr = new StreamReader(data, encoding);
string str;
StringBuilder source = new StringBuilder();
while ((str = sr.ReadLine()) != null)
source.Append(str).Append("\r\n");
value = source.ToString();
}
finally
{
if (sr != null) sr.Close();
if(data!=null) data.Close();
if(response!=null) response.Close();
}
return value;
}
源码有那么容易获取吗?有那么容易获取,网站早就不安全了。
/// <summary>
/// 获取html代码
/// </summary>
/// <param name="url">网页地址</param>
/// <returns></returns>
public string GetHtml(string url)
{
string str = string.Empty;
try
{
WebRequest request = WebRequest.Create(url);
request.Timeout = 30000;
request.Headers.Set("Pragma", "no-cache");
WebResponse response = request.GetResponse();
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.GetEncoding("GB2312");
StreamReader streamReader = new StreamReader(streamReceive, encoding);
str = streamReader.ReadToEnd();
streamReader.Close();
}
catch (Exception ex)
{ }
return str;
}
测试过 没问题 给分 有图有真相 读取Mop的帖子