|
|
发表于 2016-2-26 16:23:12
|
显示全部楼层
! O. D; s# P# T缺少一个gethtml,用下面这个:
4 R( S# |* E" X+ ?( k* w2 K) x/ J- public string getHtml(string url, string charSet, bool UseUTF8CharSet)//url是要访问的网站地址,charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码 ( x! J. D& ^5 w. ^
- { P4 r6 o& O% u5 e8 Z }
- string strWebData = "error";' f$ @: s4 S% K9 o; z9 d) I0 P* v
- try
+ Y. x( z# L7 [' m0 z: \ - {* i, L7 g+ z& W; Y3 x9 T
- WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient 8 H S8 H% ~4 R8 j
- // 需要注意的: " s, \: U6 f1 c, X
- //有的网页可能下不下来,有种种原因比如需要cookie,编码问题等等
5 x2 I( l$ x1 y; ]( r# P - //这是就要具体问题具体分析比如在头部加入cookie ( @4 K, \0 q. t! e! ~
- // webclient.Headers.Add("Cookie", cookie);
9 t2 \/ h1 Q; M- Q. ^' B* o7 e - //这样可能需要一些重载方法。根据需要写就可以了
* p' }( K7 O) ~# \; Y& H$ K - 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)");
: y5 D+ B- L3 Y - //myWebClient.Headers.Add("User-agent", "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");3 D3 y; b( {- }
- //获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。 5 L) I+ c* q$ Z! z, K" U& N& q
- myWebClient.Credentials = CredentialCache.DefaultCredentials;
! U; D4 w- n7 Y+ ]- {$ v - //如果服务器要验证用户名,密码
! F' L3 ]( ?+ ]% C2 p1 r$ r7 ? - //NetworkCredential mycred = new NetworkCredential(struser, strpassword); x- R/ i% B& H% e9 }7 U
- //myWebClient.Credentials = mycred; . k, C( o3 n D+ g1 f4 V$ n
- //从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号)
* f6 @4 P% `5 A' N, Q5 U) k - byte[] myDataBuffer = myWebClient.DownloadData(url);! \- v2 w& ~& S7 L$ ^* x
- strWebData = Encoding.Default.GetString(myDataBuffer);
2 ?* t$ s+ |3 ^9 W: `
3 b; ^4 ?3 i2 E5 {) O9 a- //获取网页字符编码描述信息
6 U b2 G1 h7 o% h( I8 J - Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
! u, r) g/ J4 o* b$ X! Z+ \! ^% U" L - string webCharSet = charSetMatch.Groups[2].Value;! n& t/ o6 s* F3 M
- if (charSet == null || charSet == "")
" p# i/ {* [, m6 k - charSet = webCharSet;' d9 V* C1 U- H9 n6 o! x
- if (charSet.Length > 0)
. x0 i& ]9 W+ T5 P) J' |: t - {
1 C( m# ^9 k5 @0 }+ y( m - charSet = charSet.Replace(""", "");
0 K$ I+ X1 p$ }0 G5 a - }
4 ?7 C# q! z$ E7 I4 l5 L. k4 } - if (UseUTF8CharSet)
: k9 L$ Y4 z' P, @ - {
4 _) L& ]) R# k# P- U1 z - if (charSet == null || charSet.Length == 0)" L8 h' F- y3 L4 ^+ P M- a6 O9 L3 y
- {" V3 Y/ |# E' o1 N; T4 e0 `: F8 {% g
- charSet = "utf-8";+ H t7 R+ P% t4 [" ~# |( ]$ P9 }
- }7 G- j% y. ]8 W: w* [+ W' Q, @& @# s
- }' ?% [0 C4 ~3 x4 Y3 h
- if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default)
' E8 w# ^2 ]2 J. a" ?/ Z# o9 P" j- v - strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer);1 v# \8 Q4 K% c6 W) p2 d
- q" Y, N. f, ?( @
- }5 C2 e- ~% t4 E
- catch (Exception)
. I: N& H; u% N, f' P1 R' L; N - {5 G S, v; _3 j( \4 j( @3 p, m9 |( ~
- strWebData = "error";. A. N" H: u: z G; u
- }7 D4 Z5 ?- X, r8 l' y) I
- ! A3 k3 c; a4 k, Q$ Y
- return strWebData;
% V! B( O# D$ |: B# L1 D/ o - }
复制代码
. w1 e- S2 e; v |- b; \6 l% x i, Z
8 c6 _ c' }- i- R k |
|