找回密码
 立即注册

QQ登录

只需一步,快速开始

PropellerAds
Google-Bing-Mediago-Criteo开户
⚡️按条S5代理⚡️静态⚡️独享⚡️5GMediabuy⚡️玩家开户首选【鲁班跨境通-自助充值转账】
FB/GG/TT❤️官方免费开户Affiliate 全媒体流量资源⚡️Taboola/Outbrain /Bing⚡️一级代理开户投流-7*24h❤️人工在线
【官方】❤️搜索套利买量投流开户独立站⚡️开户投放Google FB TK游戏代投⚡️E.PN 虚拟卡⚡️
BINOM TRACKER 60% OFF!比Adplexity还好用的Spy工具ADPLEXITY + ADVERTCN7200W全球动态不重复住宅IP代理
虚拟信用卡+独立站收款【15 年团队 - 广告自动化系统、定制开发】【ActionKey】Meta API 桥接令牌尤里改 - FB 稳定投放
【神盾 AI】Meta 广告资产防护 永久免费FB 三不限源头 - 自助下户充值转款各种主页、账单户、BM户(优势)IPCola原生住宅IP⚡️$1.8/条双ISP
FB资源,账单户,分享户,国内一手TK加白户/二解户/FB海外户/GG老户 FB高权重耐操个号⚡️稳定过审FB企业户海外户,授信户,TK加白户
✔Taboola海外户源头广告位出租虚拟卡返佣1%,国内持牌机构 
查看: 10272|回复: 7

[业界] 求推荐一个一键提取网站里面的URL且根据域名去重复的小...

[复制链接]

36

主题

215

广告币

298

积分

初级会员

积分
298
发表于 2016-2-26 16:08:04 | 显示全部楼层 |阅读模式
回复

使用道具 举报

2

主题

1487

广告币

1829

积分

高级会员

积分
1829

社区QQ达人

发表于 2016-2-26 16:17:11 | 显示全部楼层
  1. #region 抓取全站链接/ C4 _1 l( j4 B8 \# j. l+ v* G
  2.         public static List<string> GetAllHref(string url)1 ]  n/ g3 w7 D) N' ~. v- P
  3.         {
    ' j9 a( M7 L0 R  Z( B8 L( T4 }" Y
  4.             List<string> allHref = new List<string>();
    3 m1 q6 h7 S$ @. o5 i
  5.             try
    " o0 y  u8 \( B) G! z7 ?
  6.             {
    5 T6 f& k& u6 d& {! H. k2 v
  7.                 string strhtml = soso.getHtml(url, "", true);" ?! ^  x* U. i. ~& d
  8.                 if (strhtml != "error")* S5 h) v6 T, N' w9 k$ N
  9.                 {3 ~% `0 V: i* u9 d
  10.                     Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");( z% c2 H2 l6 y7 z: }& V2 k* r& S
  11.                     MatchCollection mc = reg.Matches(strhtml);$ ?. X: m! m+ d5 T' M
  12.                     foreach (Match m in mc)
    . y# g  p4 V$ s3 A
  13.                     {
    . z. z& T. f# b) ^* M/ T* R; P0 _
  14.                         Uri uri = new Uri(url);) w  h, i; E  f
  15.                         Uri thisUri = new Uri(uri, m.Groups["url"].Value);
    ) m% ?& k; x9 M( j2 t7 M, H
  16.                         string fullUrl = "";
    & C3 V( }, v3 {$ r. _8 E
  17.                         if (m.Groups["url"].Value.StartsWith("http"))6 }; t% B7 |1 O
  18.                         {$ k% y. Z, G/ ]* D7 }; S3 f+ w
  19.                             fullUrl = m.Groups["url"].Value;( T9 ~1 a  ~& G: ~8 f2 j
  20.                         }
    3 `( s- W' q+ G- L/ N, D
  21.                         else
    3 v  [9 h1 J2 D; r0 u
  22.                         {  D) S' m$ g8 n. w; N2 O- l6 i
  23.                             fullUrl = thisUri.ToString();
    7 K: E$ x4 E4 Q  r  Q# B
  24.                         }, y4 D  s) ~: H7 h& }$ w
  25.                         allHref.Add(fullUrl);
    # S/ |6 U; s' ]3 V( z5 n
  26.                         //Console.WriteLine("原链接:" + m.Groups["url"].Value);/ J- u$ ?# c# K2 T9 T+ K
  27.                         //Console.WriteLine("文本标记:" + m.Groups["text"].Value);
    ! n/ I7 @; W$ U5 o0 H# N8 L
  28.                         //Console.WriteLine("补全链接:" + fullUrl);8 C4 U+ k0 d# _: ~9 N" @
  29.                         //Console.WriteLine("…………………………………………");1 Z. o& e0 m3 ~7 b$ ]* h9 Z9 {
  30.                     }
    6 @! D: _* E) Z% R  @
  31.                 }, T' K7 C' u0 h- W" i9 W  r
  32.             }
    ' i) O9 n$ ]$ }% @# ^' q
  33.             catch (Exception ex)% g# w9 _9 t5 N' n. l7 A9 z
  34.             { }
    & [1 C: H: I8 Z- x; W
  35.             return allHref;
    , W) r2 V) v9 G
  36.         }
    . f: w/ B9 n0 F2 p3 N
  37.         #endregion
复制代码

4 I0 c0 W9 `! s) F! C9 q: f; ~- Y1 Y0 ?
  1. 7 A/ g1 s1 q; Z3 C

  2. 4 j; q( I1 a3 W: N+ L

  3.   @8 M) N. D6 U6 k, p
  4. #region 数据去重
    ; }7 A" n; Z+ ?- Q8 @" N/ M
  5.         /// <summary>
    + A  p/ `6 B/ j* c4 y2 k
  6.         /// List<string>去重
    5 f7 P0 S- `  }  A3 c) b7 [1 y6 r" A
  7.         /// </summary>
    ! \/ r% p+ N- Q+ {9 b
  8.         /// <param name="list"></param>$ c9 V8 g, v0 o: T/ M7 \" y! R
  9.         /// <returns></returns>, t% B! m# ^% z: ?/ v' e
  10.         public static List<string> getUnqueList(List<string> list)) v3 I& I5 ^7 |$ D+ _2 c
  11.         {
    . O0 `! w% a; O
  12.             List<string> list1 = new List<string>();
    8 ?6 T" m+ H$ b& `  X
  13.             Hashtable hash = new Hashtable();1 Q5 M, T# J$ q
  14.             foreach (string s in list)
    , c5 t+ O3 E, E* o$ t# w; E0 \
  15.             {
    + v1 f1 {( e, z) t, m
  16.                 if (!hash.ContainsKey(s))
    ; P; [" [2 o& u  t3 f1 y
  17.                 {
    # K% g" t, P" p
  18.                     hash.Add(s, s);
    ; U1 p& ^! \* w5 s8 J4 V( V8 u
  19.                     list1.Add(s);
    9 j" Z, x4 Z% q6 i6 ~( D9 L7 B
  20.                 }
    % K# m* y8 J5 K9 _& r
  21.             }7 W) e# B3 m! H3 B0 e( |/ d% g/ }
  22.             hash.Clear();
    ' [3 }+ |" W; \, p9 q
  23.             hash = null;
    + r: F4 f; s9 i) W
  24.             return list1;
    " R: H1 R6 y5 J9 n* [' x7 R0 Z* G2 B
  25.         }, J$ k5 t6 i- J" I
  26.         #endregion
复制代码

  _- I$ j6 `& N; m  @+ i
* R4 ~# |( s, H' V1 }! @" g/ N- a

点评

谢谢分享  发表于 2016-2-27 15:15
十分感谢!!!非常感谢!!  详情 回复 发表于 2016-2-26 16:20
回复 支持 反对

使用道具 举报

36

主题

215

广告币

298

积分

初级会员

积分
298
 楼主| 发表于 2016-2-26 16:20:16 | 显示全部楼层

) I8 l0 T' U+ z" s" ]十分感谢!!!非常感谢!!

点评

缺少一个gethtml,用下面这个:  详情 回复 发表于 2016-2-26 16:23
回复 支持 反对

使用道具 举报

2

主题

1487

广告币

1829

积分

高级会员

积分
1829

社区QQ达人

发表于 2016-2-26 16:23:12 | 显示全部楼层
guys 发表于 2016-2-26 16:20
$ c9 s: y8 a" m, g十分感谢!!!非常感谢!!

& r6 T$ p. M7 d% {: ^" X8 Y缺少一个gethtml,用下面这个:3 w+ H: B+ O& E5 T8 a' M
  1.      public string getHtml(string url, string charSet, bool UseUTF8CharSet)//url是要访问的网站地址,charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码
    . v( x! q9 M! w# r0 V
  2.         {  s: |0 |/ j) A2 f5 }) U1 I+ _* C
  3.             string strWebData = "error";4 K% e$ {/ F# n8 G- K
  4.             try
    + Z1 `+ j% r" ?
  5.             {
    0 C8 ]. a7 T( v! Y% c
  6.                 WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient ! t  l& ]+ M8 d5 j- P: f1 T8 Y
  7.                 // 需要注意的: - I& S% {$ [- w6 z/ V
  8.                 //有的网页可能下不下来,有种种原因比如需要cookie,编码问题等等
    ) G1 m) t: u% P+ z% ~
  9.                 //这是就要具体问题具体分析比如在头部加入cookie . {0 d8 X# @. C5 Z  f
  10.                 // webclient.Headers.Add("Cookie", cookie); 3 c9 o  D5 X* f6 T6 W
  11.                 //这样可能需要一些重载方法。根据需要写就可以了
    . T, f$ r+ V' R
  12.                 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)");
    3 c. o) I8 T2 ?7 ?7 L
  13.                 //myWebClient.Headers.Add("User-agent", "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");
    3 d& R6 P: j- f3 d8 A' Q
  14.                 //获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。
    ! ]1 w( v" \3 A: C$ D3 t% V
  15.                 myWebClient.Credentials = CredentialCache.DefaultCredentials;
    7 I0 o$ W7 D0 o( s# v( }
  16.                 //如果服务器要验证用户名,密码 5 Y9 p& z$ w- O3 M
  17.                 //NetworkCredential mycred = new NetworkCredential(struser, strpassword);
    " E1 ]' H% b- Z! q) U
  18.                 //myWebClient.Credentials = mycred;
    ( q3 C, Q  ~. T
  19.                 //从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号) 7 a2 }! x: ]8 T9 u/ d, @2 I' {
  20.                 byte[] myDataBuffer = myWebClient.DownloadData(url);
    - X- k- P7 Z9 U: a3 R
  21.                 strWebData = Encoding.Default.GetString(myDataBuffer);
    6 N& @$ `* c- O! b+ m3 l3 M% Y

  22. # _/ }' ^) h  l, \  U# J, e
  23.                 //获取网页字符编码描述信息 ) m, D: T: W( \
  24.                 Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
    ' O& o& B4 V* [% z2 x! O5 c
  25.                 string webCharSet = charSetMatch.Groups[2].Value;. v8 P1 q3 _& d6 w) \  `3 o
  26.                 if (charSet == null || charSet == "")
    ; j: R% ?; F4 ?. |* c1 {- I  L
  27.                     charSet = webCharSet;
    5 d+ |( Y  H8 N* w" z& R
  28.                 if (charSet.Length > 0)& M" K8 E, P1 {/ Y1 w( }
  29.                 {! L! G! V  G% G3 F
  30.                     charSet = charSet.Replace(""", "");
    $ U9 d/ M- R, y& y' M
  31.                 }
    / |! P# {, I4 C! V* T0 W) c4 O* |
  32.                 if (UseUTF8CharSet)
    " J" W" L* [1 g% U
  33.                 {+ ~$ c, k7 l7 U, k% e8 T" t
  34.                     if (charSet == null || charSet.Length == 0)
    # }; K  D8 P4 O: ]. h; L
  35.                     {$ e& l2 {" u7 S' C( n  m' Y
  36.                         charSet = "utf-8";1 e; R' M' d1 u6 w# Z8 M
  37.                     }! z% b% w, i$ E, R& [( g9 h
  38.                 }( a. C9 L6 d* }$ w
  39.                 if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default)* y  ?2 B+ K0 S& ~: o/ i, ]$ H& A; x/ a
  40.                     strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer);
    1 L3 R4 h+ r. B& K5 Z# z0 w9 Y/ A$ n

  41. " {2 M/ H% G5 u* H+ ?
  42.             }
    $ t0 \! v% f! a/ m( R
  43.             catch (Exception)
    1 B7 ^) U  \: K* \7 G1 z# k
  44.             {
    8 i  |2 j0 \, r/ s
  45.                 strWebData = "error";- ]1 j' w# [6 n1 m
  46.             }/ a+ K/ `+ C7 I
  47. ) D& s# v) j, ]. e7 p
  48.             return strWebData;
    ; Z% G7 o) f+ w0 W5 V& Z9 o7 u# _9 x; z
  49.         }
复制代码
1 V/ ^+ {7 z1 a: l, E2 b/ E' e

' s7 ^: ?$ m* h+ G' t1 Y
回复 支持 反对

使用道具 举报

0

主题

0

广告币

13

积分

新手上路

积分
13
发表于 2016-2-26 19:05:59 | 显示全部楼层
weishaneweishane
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们|联系我们|DMCA|广告服务|小黑屋|手机版|Archiver|Github|网站地图|AdvertCN

GMT+8, 2026-10-25 20:50 , Processed in 0.070983 second(s), 27 queries , Gzip On.

Copyright © 2001-2026, AdvertCN

Proudly Operating in Hong Kong.

快速回复 返回顶部 返回列表