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

以一種"廉價"的方式獲取頁面的標題(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條評論
主站蜘蛛池模板: 美女18xxxx| 国产成人毛片亚洲精品不卡 | 精品久久久久久中文字幕一区 | 国产一级特黄老妇女大片免费 | 欧美 日韩 成人 | 亚洲成av人片天堂网 | 欧美天天在线 | 亚洲精品综合一区在线 | 中文字幕 亚洲一区 | 国产精品成人亚洲 | 欧美精品午夜毛片免费看 | 国产精品久久亚洲不卡动漫 | 四虎影院最新入口 | 在线播放国产精品 | 中文在线免费视频 | 久久国产亚洲高清观看5388 | 日韩中文字幕精品久久 | 在线观看深夜观看网站免费 | 色激情五月 | 国产国产精品人在线观看 | 青青青在线视频国产 | bbw下身丰满18ⅹxxⅹ | 国产一级αv片免费观看 | 久久久精彩视频 | 色综合久久久久久久久久久 | 国产精品久久久久久久y | 久久精品国产一区二区三区日韩 | 91视频高清 | 国产亚洲精品麻豆一区二区 | 奇米影视777色 | 成人欧美精品大91在线 | 伊人久久影院 | www.色午夜.com| 久久久综合香蕉尹人综合网 | 亚洲视频在线观看一区 | 中文字幕在线观看亚洲日韩 | 亚洲精品1区| 国产大片中文字幕 | 欧美精品一区在线看 | 俄罗斯美女逼 | 欧美日韩乱码毛片免费观看 |