c#获取完整的网页源码 不用WebBrowser 页面:http://www.yzu.edu.cn/col/col37746/index.html?uid=55987&pageNum=1能获取到源码然后告诉我下代码怎么实现的 直接结单 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 打开浏览器,右键查看源代码。代码实现的话,使用webclient即可。 string url = @"http://www.yzu.edu.cn/col/col37746/index.html?uid=55987&pageNum=1"; WebClient wb = new WebClient(); string htmlData = wb.DownloadString(url).ToString(); 1#的代码没问题..var html=new webclient.downloadstring("url");可以获取当前html的"源码".但是你说到"不完整" 这个东西 他获取到是 html的源码 而不是F12查看元素的源码.因为里面有一些东西是动态加载出来的. 这种是无法获取的.. 而且也没有解决方案.所以如果你想要找一些数据 你只能F12看里面有没有其他ajax的请求了.于是我打开了这个网页. 发现你想获取的 就是新闻吧 也就是 你想采集新闻.那么我们F12抓一下数据 就能看到有接口请求.这里http://www.yzu.edu.cn/module/web/jpage/dataproxy.jsp?startrecord=61&endrecord=120&perpage=20&MmEwMD=4dFAejc73667JfvLEKTe6yyzx2HofN1YFACWDoOzWCrROd58SO3y.6HDBrxc40JEFL8cS5c63e5KpEFnZssfCmUAqjlgV3K_6fP.tODg3C5OndOTRoNi2UkCDUhyr9VLOja7IgGVA8xvVYO2ujwGZXjYyxoyoUiI57nAEEmesn.bnIEHMoeyD8uSkj_SZEQD08wnI4mSNCdpCPKfdZVKzmnaOgoos_6CSRcRuzcQXl0UyPxgUTeLmF4qQHtSqHDxjN7GAisHPiiLJ.dyln.STmt6zx.UohSQrM2ENMaMKKqWZElTyBRzkie7wBSv5Hm.VolPZIcSQlC2Pe6v31OCXpYwMev0zexaX1fF1C9H4rzD9Eoo67Bwng4rMiZ03Tkcj4ZQkNn89ZKBvc50FAGoUGeai1wODLV7W47uDYX4AJeQAM9tExxTv0Ghi6lywohxx9sc请求这里发现返回的是xml的数据<datastore><totalrecord>8558</totalrecord><totalpage>428</totalpage><recordset><record><![CDATA[<li><span>2019-09-03</span><a href='/art/2019/9/3/art_37746_710465.html' title='我校第二届“中美人才培养计划121双学位项目”学生赴美学习' target='_blank'>我校第二届“中美人才培养计划121双学位项目”学生赴美学习</a></li>]]></record><record><![CDATA[<li><span>2019-09-02</span><a href='/art/2019/9/2/art_37746_710399.html' title='我校承办扬州市内审协会科教文卫片内审工作交流会' target='_blank'>我校承办扬州市内审协会科教文卫片内审工作交流会</a></li>]]></record><record><![CDATA[<li><span>2019-08-至于如何获取请求地址以及如何解析xml 那是你自己的问题了.只能帮你到这了. 我用的HttpWebRequest 爬虫还是python好做,可以使用Selenium+PhantomJS抓取Ajax和动态HTML内容C#可以试下CefSharp+HtmlAgilityPack 我想问一下,你到底分的清什么是源码,什么是浏览器渲染,什么是DOM么不信你问一下IE,google浏览器,360浏览器,看看他们的右键查看源代码到底是什么??告诉我,IE右键查看源代码,不是你所谓的完整google浏览器右键查看源代码,不是你所谓的完整 网上资料比较少,没找到,你能给我个获取源码的方法吗,你说的这个winform能用吗 这个我也用了 但获取不到完整的源码带上头部标签 然后找对应setcookie的页面 最主要的是要声明agent 和来源 这个我也用了 但获取不到完整的源码带上头部标签 然后找对应setcookie的页面 最主要的是要声明agent 和来源大佬能弄个示例吗 你这样说我不是很懂 public string GetHtmlInfo() { string strUrl="http://www.yzu.edu.cn/col/col37746/index.html?uid=55987&pageNum=1"; string strHtml = string.Empty; Uri httpURL = new Uri(strUrl); System.Net.HttpWebRequest httpReq; System.Net.HttpWebResponse httpResp; string strBuff = ""; char[] cbuffer = new char[1000]; int byteRead = 0; ///HttpWebRequest类继承于WebRequest,并没有自己的构造函数,需通过WebRequest的Creat方法 建立,并进行强制的类型转换 httpReq = (HttpWebRequest)WebRequest.Create(httpURL); ///通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换 httpResp = (HttpWebResponse)httpReq.GetResponse(); ///GetResponseStream()方法获取HTTP响应的数据流,并尝试取得URL中所指定的网页内容 ///若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生ProtoclViolationException错 误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理 Stream respStream = httpResp.GetResponseStream(); ///返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以 //StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8) StreamReader respStreamReader = new StreamReader(respStream, Encoding.UTF8); byteRead = respStreamReader.Read(cbuffer, 0, 256); while (byteRead != 0) { string strResp = new string(cbuffer, 0, byteRead); strBuff = strBuff + strResp; byteRead = respStreamReader.Read(cbuffer, 0, 256); } respStream.Close(); strHtml = strBuff; return strHtml; } string message = ""; HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://baidu.com"); HttpWebResponse response=null; try { request.Proxy = null; //request.KeepAlive = false; //声明一个HttpWebRequest请求 request.Timeout = 60000; //设置连接超时时间 request.Headers.Set("Pragma", "no-cache"); response = (HttpWebResponse)request.GetResponse(); if (response.ToString() != "") { Stream streamReceive = response.GetResponseStream(); Encoding encoding = Encoding.GetEncoding("UTF-8");//乱码处理 StreamReader streamReader = new StreamReader(streamReceive, encoding); message = streamReader.ReadToEnd(); //取指定第几个table String withoutNString = message.Replace("\n", ""); //过滤\r 转换成空 String withoutRString = withoutNString.Replace("\r", ""); //过滤\t 转换成空 String withoutTString = withoutRString.Replace("\t", ""); //过滤\ 转换成空 String newString = withoutTString.Replace("\\", ""); //获取html中的body标签 String result = Regex.Match(newString, @"<body.*>.*</body>").ToString(); //过滤注释 String result2 = Regex.Replace(result, @"<!--(?s).*?-->", "", RegexOptions.IgnoreCase); //过滤nbsp标签 String result3 = Regex.Replace(result2, @" ", "", RegexOptions.IgnoreCase); //获取body中的所有table Regex regex = new Regex(@"<table.*?>[\s\S]*?<\/table>"); MatchCollection mc = regex.Matches(result3); //获取集合类中自己需要的某个table String newHtmlStr = mc[1].ToString(); //将数据返回 //Response.Write(newHtmlStr); Regex reg = new Regex(@"(?<=<td>).*?(?=</td>)"); mc = reg.Matches(newHtmlStr); string strQh = mc[0].ToString(); string strZj = mc[1].ToString(); string dataTime = mc[2].ToString(); DateTime dt = Convert.ToDateTime(dataTime).AddMinutes(6.1); TimeSpan ts = dt - DateTime.Now; if (ts.TotalMilliseconds <= 0) { hifMilliseconds.Value = "20000"; } else if (ts.TotalMilliseconds > 306000) { hifMilliseconds.Value = "360000"; } else { hifMilliseconds.Value = ts.TotalMilliseconds.ToString(); } //hifMilliseconds.Value = (Convert.ToInt32(hifMilliseconds.Value) * 1000).ToString(); string strSql = "select QH from TbKj where QH='" + strQh + "'"; DataSet dst = Business.Public.Public.ExcuteDataSet(strSql); if (dst.Tables[0].Rows.Count == 0) { strSql = "insert into TbKj values('" + strQh + "','" + strZj + "','" + dataTime + "','0') update TbKj set Ifkj='1' where QH<>" + strQh + ""; Business.Public.Public.ExcuteSql(strSql); } else { hifMilliseconds.Value = "20000"; } streamReceive.Close(); streamReader.Close(); } response.Close(); request.Abort(); } catch (Exception exp) { //MessageBox.Show(exp.Message); hifMilliseconds.Value = "20000"; request.Abort(); //this.Response.Redirect("F5.aspx"); } finally { if (request != null) { try { request.Abort(); } catch { request.Abort(); } } if (response != null) { try { response.Close(); } catch { response.Close(); } } }只能帮到这里了。 具体是不是你需要的 求Griview代码 大家在开发asp.net网站的时候,前台用什么工具的 ActiveX控件高度如何自适应页面 【在线等】应用程序中的服务器错误 关于本地化 没有分了 !! 请问如何VB 语法获得 文件路径 的 文件名 ????????????? 怎么给微软的TreeViewde的节点增加客户端的onclick事件啊? 大家在asp.net里将脚本都写在什么地方的呀 初学者问一个简单问题 up有分!简单问题 VS2015怎么用 repeater绑定多条数据如何设置延时
代码实现的话,使用webclient即可。 string url = @"http://www.yzu.edu.cn/col/col37746/index.html?uid=55987&pageNum=1";
WebClient wb = new WebClient();
string htmlData = wb.DownloadString(url).ToString();
var html=new webclient.downloadstring("url");可以获取当前html的"源码".但是你说到"不完整" 这个东西 他获取到是 html的源码 而不是F12查看元素的源码.因为里面有一些东西是动态加载出来的. 这种是无法获取的.. 而且也没有解决方案.所以如果你想要找一些数据 你只能F12看里面有没有其他ajax的请求了.于是我打开了这个网页. 发现你想获取的 就是新闻吧 也就是 你想采集新闻.那么我们F12抓一下数据 就能看到有接口请求.
这里
http://www.yzu.edu.cn/module/web/jpage/dataproxy.jsp?startrecord=61&endrecord=120&perpage=20&MmEwMD=4dFAejc73667JfvLEKTe6yyzx2HofN1YFACWDoOzWCrROd58SO3y.6HDBrxc40JEFL8cS5c63e5KpEFnZssfCmUAqjlgV3K_6fP.tODg3C5OndOTRoNi2UkCDUhyr9VLOja7IgGVA8xvVYO2ujwGZXjYyxoyoUiI57nAEEmesn.bnIEHMoeyD8uSkj_SZEQD08wnI4mSNCdpCPKfdZVKzmnaOgoos_6CSRcRuzcQXl0UyPxgUTeLmF4qQHtSqHDxjN7GAisHPiiLJ.dyln.STmt6zx.UohSQrM2ENMaMKKqWZElTyBRzkie7wBSv5Hm.VolPZIcSQlC2Pe6v31OCXpYwMev0zexaX1fF1C9H4rzD9Eoo67Bwng4rMiZ03Tkcj4ZQkNn89ZKBvc50FAGoUGeai1wODLV7W47uDYX4AJeQAM9tExxTv0Ghi6lywohxx9sc请求这里发现返回的是xml的数据
<datastore><totalrecord>8558</totalrecord><totalpage>428</totalpage><recordset><record><![CDATA[<li><span>2019-09-03</span><a href='/art/2019/9/3/art_37746_710465.html' title='我校第二届“中美人才培养计划121双学位项目”学生赴美学习' target='_blank'>我校第二届“中美人才培养计划121双学位项目”学生赴美学习</a></li>]]></record><record><![CDATA[<li><span>2019-09-02</span><a href='/art/2019/9/2/art_37746_710399.html' title='我校承办扬州市内审协会科教文卫片内审工作交流会' target='_blank'>我校承办扬州市内审协会科教文卫片内审工作交流会</a></li>]]></record><record><![CDATA[<li><span>2019-08-
至于如何获取请求地址以及如何解析xml 那是你自己的问题了.
只能帮你到这了.
C#可以试下CefSharp+HtmlAgilityPack
google浏览器右键查看源代码,不是你所谓的完整
带上头部标签 然后找对应setcookie的页面 最主要的是要声明agent 和来源
带上头部标签 然后找对应setcookie的页面 最主要的是要声明agent 和来源
大佬能弄个示例吗 你这样说我不是很懂
{
string strUrl="http://www.yzu.edu.cn/col/col37746/index.html?uid=55987&pageNum=1";
string strHtml = string.Empty;
Uri httpURL = new Uri(strUrl);
System.Net.HttpWebRequest httpReq;
System.Net.HttpWebResponse httpResp;
string strBuff = "";
char[] cbuffer = new char[1000];
int byteRead = 0; ///HttpWebRequest类继承于WebRequest,并没有自己的构造函数,需通过WebRequest的Creat方法 建立,并进行强制的类型转换
httpReq = (HttpWebRequest)WebRequest.Create(httpURL);
///通过HttpWebRequest的GetResponse()方法建立HttpWebResponse,强制类型转换 httpResp = (HttpWebResponse)httpReq.GetResponse();
///GetResponseStream()方法获取HTTP响应的数据流,并尝试取得URL中所指定的网页内容 ///若成功取得网页的内容,则以System.IO.Stream形式返回,若失败则产生ProtoclViolationException错 误。在此正确的做法应将以下的代码放到一个try块中处理。这里简单处理
Stream respStream = httpResp.GetResponseStream(); ///返回的内容是Stream形式的,所以可以利用StreamReader类获取GetResponseStream的内容,并以 //StreamReader类的Read方法依次读取网页源程序代码每一行的内容,直至行尾(读取的编码格式:UTF8)
StreamReader respStreamReader = new StreamReader(respStream, Encoding.UTF8); byteRead = respStreamReader.Read(cbuffer, 0, 256);
while (byteRead != 0)
{
string strResp = new string(cbuffer, 0, byteRead);
strBuff = strBuff + strResp;
byteRead = respStreamReader.Read(cbuffer, 0, 256);
} respStream.Close();
strHtml = strBuff;
return strHtml; }
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://baidu.com");
HttpWebResponse response=null;
try
{
request.Proxy = null;
//request.KeepAlive = false;
//声明一个HttpWebRequest请求
request.Timeout = 60000;
//设置连接超时时间
request.Headers.Set("Pragma", "no-cache");
response = (HttpWebResponse)request.GetResponse();
if (response.ToString() != "")
{
Stream streamReceive = response.GetResponseStream();
Encoding encoding = Encoding.GetEncoding("UTF-8");//乱码处理
StreamReader streamReader = new StreamReader(streamReceive, encoding);
message = streamReader.ReadToEnd();
//取指定第几个table
String withoutNString = message.Replace("\n", "");
//过滤\r 转换成空
String withoutRString = withoutNString.Replace("\r", "");
//过滤\t 转换成空
String withoutTString = withoutRString.Replace("\t", "");
//过滤\ 转换成空
String newString = withoutTString.Replace("\\", "");
//获取html中的body标签
String result = Regex.Match(newString, @"<body.*>.*</body>").ToString();
//过滤注释
String result2 = Regex.Replace(result, @"<!--(?s).*?-->", "", RegexOptions.IgnoreCase);
//过滤nbsp标签
String result3 = Regex.Replace(result2, @" ", "", RegexOptions.IgnoreCase);
//获取body中的所有table
Regex regex = new Regex(@"<table.*?>[\s\S]*?<\/table>");
MatchCollection mc = regex.Matches(result3);
//获取集合类中自己需要的某个table
String newHtmlStr = mc[1].ToString();
//将数据返回
//Response.Write(newHtmlStr);
Regex reg = new Regex(@"(?<=<td>).*?(?=</td>)");
mc = reg.Matches(newHtmlStr); string strQh = mc[0].ToString();
string strZj = mc[1].ToString();
string dataTime = mc[2].ToString(); DateTime dt = Convert.ToDateTime(dataTime).AddMinutes(6.1);
TimeSpan ts = dt - DateTime.Now;
if (ts.TotalMilliseconds <= 0)
{
hifMilliseconds.Value = "20000";
}
else if (ts.TotalMilliseconds > 306000)
{
hifMilliseconds.Value = "360000";
}
else
{
hifMilliseconds.Value = ts.TotalMilliseconds.ToString();
}
//hifMilliseconds.Value = (Convert.ToInt32(hifMilliseconds.Value) * 1000).ToString(); string strSql = "select QH from TbKj where QH='" + strQh + "'";
DataSet dst = Business.Public.Public.ExcuteDataSet(strSql);
if (dst.Tables[0].Rows.Count == 0)
{
strSql = "insert into TbKj values('" + strQh + "','" + strZj + "','" + dataTime + "','0') update TbKj set Ifkj='1' where QH<>" + strQh + "";
Business.Public.Public.ExcuteSql(strSql);
}
else
{
hifMilliseconds.Value = "20000";
}
streamReceive.Close();
streamReader.Close();
}
response.Close();
request.Abort();
}
catch (Exception exp)
{
//MessageBox.Show(exp.Message);
hifMilliseconds.Value = "20000";
request.Abort();
//this.Response.Redirect("F5.aspx");
}
finally
{
if (request != null)
{
try
{
request.Abort();
}
catch
{
request.Abort();
}
}
if (response != null)
{
try
{
response.Close();
}
catch
{
response.Close();
}
}
}只能帮到这里了。 具体是不是你需要的