亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

以一種"廉價"的方式獲取頁面的標題(downmoon)

系統 2243 0

有朋友問到:
“我需要得到一個web page的title,因為這個title一般都比較靠前,只要取得html 的前面少量內容就可以了。因為要取得很多個頁面的title,如果下載整個html code, 肯定比較浪費時間。.net好像沒有現成的類可以干這件事情(取得部分html) ,我應該如何去實現?”
一種比較"廉價"(即較小成本條件下)的解決思路:
第一步:取出含有頁面title部分的最小集合。這是“廉價”的關鍵!
第二步:用正則表達式取出<title>和</title>之間的部分即可。
先看下效果:


下面我們來分析:
頁面title 一般都在靠近開始處,所以我們從開始讀取Stream流,(如果靠近結尾,則如何?)讀取到什么地方為止呢?有個比較明顯的標志是
</title>
遇到它結束就可以了。
以什么方式讀取,我這里選取的是:逐行讀取,取到標志符即終止。
方法如下:


<!-- {cps..2}--> #region 獲取所需要的頁面內容
/// <summary>
/// 獲取所需要的頁面內容bytony2009.9,16
/// 邀月(downmoon):3w@live.cn
/// <paramname="strUrl"> 所要查找的遠程網頁地址 </param>
/// <paramname="timeout"> 超時時長設置,一般設置為8000 </param>
/// <paramname="enterType"> 是否輸出換行符,0不輸出,1輸出文本框換行 </param>
/// <paramname="EnCodeType"> 編碼方式 </param>
/// <returns></returns>
public static string GetRequestString( string strUrl, int timeout, int enterType,EncodingEnCodeType)
{

if (strUrl.Equals( " about:blank " )) return null ;;
if ( ! strUrl.StartsWith( " http:// " ) && ! strUrl.StartsWith( " https:// " )){strUrl = " http:// " + strUrl;}
string strResult = string .Empty;
System.IO.StreamReadersr
= null ;
string temp = string .Empty;
try
{
HttpWebRequestmyReq
= (HttpWebRequest)HttpWebRequest.Create(strUrl);
myReq.Timeout
= timeout;
myReq.UserAgent
= " User-Agent:Mozilla/5.0(compatible;MSIE6.0;WindowsNT5.2;SV1;.NETCLR2.0.40607;.NETCLR1.1.4322;.NETCLR3.5.30729) " ;
myReq.Accept
= " */* " ;
myReq.KeepAlive
= true ;
myReq.Headers.Add(
" Accept-Language " , " zh-cn,en-us;q=0.5 " );
HttpWebResponseHttpWResp
= (HttpWebResponse)myReq.GetResponse();
if (HttpWResp.StatusCode == System.Net.HttpStatusCode.OK)
{
StringBuilderstrBuilder
= new StringBuilder();
StreammyStream
= HttpWResp.GetResponseStream();
sr
= new StreamReader(myStream,EnCodeType);
string tmp = string .Empty;
while ((temp = sr.ReadLine()) != null )
{
strBuilder.Append(temp);
// ifhas</title>thenendbydownmoon(邀月)2009.9.16
tmp = strBuilder.ToString();
if (tmp.IndexOf( " </title> " ) > 0 ){ break ;}
if (enterType == 1 ){strBuilder.Append( " /r/n " );}
}
strResult
= strBuilder.ToString();
return strResult;
}
return string .Empty;
}
catch (Exceptionex)
{
// #regionLoghandlebyTony2008.11.21
return strResult;
// #endregion
}
finally { if (sr != null ){sr.Close();}}
}
#endregion

取出后就是再用正則取出<title>和</title>之間的部分。
這部分浪費了些時間,因為邀月的正則功底不行啊!·
先后試過如下正則表達式:

<!-- {cps..5}--> 1 // stringstrRegEx="<[^>]*>";
2 // stringstrRegEx="<title>.*([^</title>])";
3 // stringstrRegEx="<title>(.*?)</title>";
4 // stringstrRegEx="<title>.*?</title>";

均不能達到想要的“經濟廉價”的效果,最終,找到這個:



<!-- {cps..8}--> public static string GetContextByHtml( string sHtml)
{
// stringregex="(<title[>])(.*)(<//title>)";
string regex = @" (?<=<title.*>)([/s/S]*)(?=</title>) " ;
System.Text.RegularExpressions.Regexex
= new System.Text.RegularExpressions.Regex(regex,System.Text.RegularExpressions.RegexOptions.IgnoreCase);
return ex.Match(sHtml).Value.Trim();
}


演示效果如上圖:

后續問題:
1、將繼續實現代理方式躲過IP;
2、將嘗試另外一種通過Request.Filter方式直接替換來實現。
歡迎交流。
助人等于自助! 3w@live.cn

以一種"廉價"的方式獲取頁面的標題(downmoon)


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品嫩草影院99av视频 | 成人欧美一区在线视频在线观看 | 国产精品美女一区二区三区 | 精品伊人久久 | 国产精品国产三级国产无毒 | 免费一级毛片免费播放 | 久久精品视频热 | 成年人性生活免费视频 | 亚洲综合在线观看视频 | 欧洲精品视频在线观看 | 91社区在线观看精品 | 五月婷婷综合激情 | 免费乱理伦片在线观看老妇 | 黄片毛片免费在线观看 | 国产精品四虎视频一区 | 国产美女一级视频 | 国产福利一区二区在线观看 | 精品一区二区久久久久久久网站 | 成年超爽大片免费视频播放 | 色香蕉在线 | 免费一区二区 | 亚洲国产成人在线观看 | 爱我久久视频免费观看影视 | 日韩有码在线播放 | 久久97精品久久久久久清纯 | 九九九久久久 | 午夜影院一区二区三区 | 久久96精品国产 | 色五月情| 97在线国产视频 | 国产自精品在线 | 经典国产乱子伦精品视频 | 久久久久亚洲香蕉网 | 久久青草免费91观看 | 人人揉人人爽五月天视频 | 性生生活三级视频观看 | 日韩精品视频在线观看免费 | 日本一级淫一片免费 | 久久9966精品国产免费 | 毛片一级免费 | 久久香蕉国产线看观看8青草 |