用HttpWebRequest和HttpWebResponse类获取网页等internet上的资源
解决方案 »
- 用C#编写一个可自动更新的小程序,使用Remoting技术
- 大量字符串常量的封装方法
- 获取未知接口类型方法
- 这样的值怎样不同窗体传递?
- 为什么我的机子有时会自动关机,重启时显示从一个严重错误中恢复过来
- C#经典入门 课后问题
- 请问FarPoint.Win.Spread如何设置自动适应列宽?
- 奇怪~~~~~郁闷~~~~~极度郁闷~~~~~非常郁闷的问题~~!!!! 高人进来~~~~
- Entityframework 6 sqlite ado.net 报错
- EF添加有外键model的问题
- 【为什么这么简单的一个问题,我连发了三帖都没人能够解决?为什么?我是萱萱的马甲】
- 将一个从数据库SELECT * FROM TABLE出来的结果全部保存进Session然后如何从Session中取得 某个字段 的值?
其中提取目标网页代码的函数:
//取指定链接网页的源代码
public string SourceCode(string SinaURL)
{
try
{
WebClient wc = new WebClient();
byte[] data = wc.DownloadData(SinaURL);
string HtmlCode = Encoding.Default.GetString(data);
wc.Dispose();
return HtmlCode;
}
catch(Exception ex)
{
System.Diagnostics.Debug.Write(ex.ToString());
return null;
}
}根据提到的代码再作分析,作下一步的处理。
{
string strResult ;
try
{
HttpWebRequest myReq = (HttpWebRequest)
System.Net.WebRequest.Create(a_strUrl) ;
/*NetworkCredential NetIc = new NetworkCredential("yub","168168","yyyy");
System.Net.WebProxy m=new WebProxy("10.88.10.88",8080); myReq.Proxy=m;
myReq.Proxy.Credentials=NetIc;*/ System.Net. myReq.PreAuthenticate=true;
myReq.Credentials=this.Lisen(); HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
Stream myStream = HttpWResp.GetResponseStream () ;
StreamReader sr = new StreamReader(myStream , Encoding.Default);
StringBuilder strBuilder = new StringBuilder();
while (-1 != sr.Peek())
{
strBuilder.Append(sr.ReadLine()+"\r\n");
}
strResult = strBuilder.ToString();
HttpWResp.Close();
}
catch(Exception exp)
{
strResult = "错误:" + exp.Message ;
}
return strResult ; }
HttpWebResponse response;
request=(HttpWebRequest)WebRequest.Create("需要获取html代码的页面地址");
response=(HttpWebResponse)request.GetResponse();
System.IO.StreamReader sr=new System.IO.StreamReader(response.GetResponseStream(),System.Text.Encoding.GetEncoding("gb2312"));
string s=sr.ReadToEnd();
sr.Close();
//字符串s就是你想要的
using System;
using System.Text;
using System.Net;
using System.Text.RegularExpressions;namespace Efun.Common
{
/// <summary>
/// CatchWebContent 的摘要说明。
/// </summary>
public class CatchWebContent
{
public CatchWebContent()
{
/// <summary>
/// CatchWebContent获取指定URL地址的页面内容的HTML代码。
/// </summary>
}
public string ByteGetContent(string strUrl)
{
///<summary>
///字节方式方式读取网页内容,返回网页内容的全部字符,传入要抓取的网页地址
///</summary>
strUrl = FormatString(strUrl); string strContent; if (CheckURL(strUrl))
{
try
{
WebClient myclien = new WebClient();
byte[] myData; myData = myclien.DownloadData(strUrl);
strContent = System.Text.Encoding.Default.GetString(myData).ToString().Trim(); return strContent;
}
catch(System.Exception Ex)
{
return Ex.Message.ToString();
}
}
else
{
return "您输入的地址不正确";
}
}
public string ByteGetContentClean(string strUrl)
{
///<summary>
///字节方式读取网页内容,返回网页过滤掉HTML标签后内容的字符(保留<br>标记),传入要抓取的网页地址
///</summary>
string strContent;
strContent = ByteGetContent(strUrl);
// strContent = Regex.Replace(strContent.ToLower(),@"[^(<body>(.|\n)*<\/body>)]","");
strContent = Regex.Replace(strContent.ToLower(),@"(?!<br>|<br\/>)<.*?>","");
return strContent;
}
public string StreamGetContent(string strUrl)
{
///<summary>
///流方式读取网页内容,返回网页内容的全部字符,传入要抓取的网页地址
///</summary>
strUrl = FormatString(strUrl); if (CheckURL(strUrl))
{
try
{
string strContent;
WebClient myclien = new WebClient(); System.IO.StreamReader mystream = new System.IO.StreamReader(myclien.OpenRead(strUrl),System.Text.Encoding.GetEncoding("gb2312"));
strContent = mystream.ReadToEnd().ToString().Trim(); return strContent;
}
catch(System.Exception Ex)
{
return Ex.Message.ToString();
}
}
else
{
return "您输入的地址不正确";
}
}
public string StreamGetContentClean(string strUrl)
{
///<summary>
///流方式读取网页内容,返回网页过滤掉HTML标签后内容的字符(保留<br>标记),传入要抓取的网页地址
///</summary>
string strContent;
strContent = StreamGetContent(strUrl);
// strContent = Regex.Replace(strContent.ToLower(),@"[^(<body>(.|\n)*<\/body>)]","");
strContent = Regex.Replace(strContent.ToLower(),@"(?!<br>|<br\/>)<.*?>","");
return strContent;
} private bool CheckURL(string strUrl)
{
///<summary>
///检测输入的地址格式
///</summary>
if (Regex.IsMatch(strUrl,@"(\s|\n|^)(\w+://[^\s\n]+)"))
{
return true;
}
else
{
return false;
}
}
private string FormatString(string strUrl)
{
///<summary>
///检测输入的地址格式有没有包含URL前缀
///</summary>
if (strUrl.ToLower().Substring(0,7) != "http://")
{
strUrl = "http://" + strUrl;
}
return strUrl;
}
}
}
比如用ASP.DotNet中常用的datagrid,上面所有的操作几乎都是
<td align="right" width="1%"><input language="javascript" onclick="showOrg(); __doPostBack('_ctl1$benSelOrg','')" name="_ctl1:benSelOrg" id="_ctl1_benSelOrg" type="button" class="button" value="选择" />
</td>
形式的超链接,所以只能点击才能进入。这个问题怎么解决啊?
{
object Zero = 0;
object EmptyString = "";
axWebBrowser1.Navigate(textBox1.Text,ref Zero, ref EmptyString, ref EmptyString, ref EmptyString); } private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
{
IHTMLDocument2 HTMLDocument =(IHTMLDocument2) axWebBrowser1.Document;
IHTMLElementCollection links = HTMLDocument.links; listBox1.Items.Clear(); foreach (HTMLAnchorElementClass el in links)
{
listBox1.Items.Add(el.outerHTML);
} }链接列在listBox1里
还要加上
using mshtml;我觉的用IHTMLDocument2分析网页最简单的
另外zachary7833(潜龙勿用to飞龙在天) 虽然没有完全回答出来我的问题,但是mshtml对象对我的启发不小所以给的分数多一些。