日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統 2418 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條評論
主站蜘蛛池模板: 苍山县| 修文县| 青浦区| 大宁县| 临夏市| 屯留县| 连江县| 九龙城区| 遂平县| 朔州市| 江孜县| 翁源县| 海城市| 新宁县| 启东市| 上犹县| 舞阳县| 日喀则市| 高平市| 昂仁县| 濮阳市| 陆川县| 芦山县| 新郑市| 新河县| 鄂托克旗| 富民县| 嘉义县| 萍乡市| 滕州市| 清丰县| 邳州市| 石首市| 高平市| 潼南县| 醴陵市| 灯塔市| 进贤县| 清镇市| 富裕县| 鹤岗市|