|
|
发表于 2016-2-26 16:23:12
|
显示全部楼层
$ E! n* G- x: s! g. C5 z; [
缺少一个gethtml,用下面这个:) r* e: v' }) M4 J+ B3 k6 x, A3 u
- public string getHtml(string url, string charSet, bool UseUTF8CharSet)//url是要访问的网站地址,charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码 / P0 x$ x: W: V/ V5 B O5 U
- {
9 j; T1 {0 H- ~& |3 A" \( u - string strWebData = "error";& C0 ~" [* B7 o
- try. X W! r! A. Q5 u
- {
d6 [4 y' H3 k1 R - WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient
) D( F* I0 a) _8 D, {, W1 L) f - // 需要注意的: ! j7 ~" T7 k& |0 p& B
- //有的网页可能下不下来,有种种原因比如需要cookie,编码问题等等 - A- S5 y" }. J7 C1 a; X
- //这是就要具体问题具体分析比如在头部加入cookie 3 E" f, s" E' I4 P- M0 j
- // webclient.Headers.Add("Cookie", cookie);
2 t/ ^6 D( h3 j: m! p5 P3 G - //这样可能需要一些重载方法。根据需要写就可以了
/ y8 X! W9 o. b; o7 [& e$ g' V - myWebClient.Headers.Add("User-agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)");
$ y2 f, C/ o( q3 s# @8 {! i - //myWebClient.Headers.Add("User-agent", "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"); w: _2 u! R# n* p7 T0 A
- //获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。 0 a4 v' f Q7 I- J" U( S
- myWebClient.Credentials = CredentialCache.DefaultCredentials;4 ^9 b7 b( ^+ Q" t3 N' N! c
- //如果服务器要验证用户名,密码
. _ {1 M4 r' x$ b3 B& m+ `; @ - //NetworkCredential mycred = new NetworkCredential(struser, strpassword); + ?' L6 H7 h. e, g
- //myWebClient.Credentials = mycred; 9 W5 h1 t2 M" z
- //从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号) ( B: B+ o; a& f- T
- byte[] myDataBuffer = myWebClient.DownloadData(url);" m9 n) \) _' s8 M a
- strWebData = Encoding.Default.GetString(myDataBuffer);
3 E9 K( u" h, {+ A - ! u3 I* J8 |7 z Z) Y& ^$ t: f
- //获取网页字符编码描述信息
6 L% y. p W% O6 b5 g4 t2 l- p6 l$ g - Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
; `$ ^# x! K. ?$ P5 } - string webCharSet = charSetMatch.Groups[2].Value;
& t$ k" w4 k5 L R' ?6 b2 M X. a- C - if (charSet == null || charSet == "")4 a( b+ |/ k" |% G" s9 c
- charSet = webCharSet;
: }9 Q4 t$ J/ o - if (charSet.Length > 0)
. N& H0 g% _ o - {
7 P5 N' K3 P& ]5 M4 o - charSet = charSet.Replace(""", "");# r3 d) x# d* N2 e8 p
- }
0 c$ ?- D; g d4 U' T" A - if (UseUTF8CharSet)
( k9 j# |3 U: d& _5 C* ~& I; P1 z - { D7 q' U, K# T* l) }8 |
- if (charSet == null || charSet.Length == 0). h. M% h& H: n$ y/ v
- {
. s3 S7 c9 ?: Q! s - charSet = "utf-8";. [9 ?; n; P/ O& [2 K
- }
0 a% G. E4 t9 R; E! L - }. O5 d' y+ L/ Z
- if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default). a% w0 O- F0 |5 v% N" N
- strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer);
0 k/ c, b7 q1 u/ B A
5 m! H" z) q( r" d7 S* w- }
1 M% w- Q3 i o6 |- e- T - catch (Exception)
' L7 n. P& L5 E: s9 M$ R - {
) ~. W/ I0 H7 w" Q, D! G - strWebData = "error";- q% X0 Q" Q4 p7 F# x! h# k
- }/ t7 N: v- Y+ k; A4 u$ P: t
- ( |( c4 \0 b+ A9 W# r5 y8 O
- return strWebData;2 t% g7 }* W+ z: Z8 D* w+ _0 t& q+ {3 D
- }
复制代码
- v \: T0 T2 Z, }
& w6 ~6 @% l2 K9 P1 q. g |
|