找回密码
 立即注册

QQ登录

只需一步,快速开始

PropellerAds
⚡️按条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代理全球虚拟卡, 支持U充值
【15 年团队 - 广告自动化系统、定制开发】【ActionKey】Meta API 桥接令牌尤里改 - FB 稳定投放【神盾 AI】Meta 广告资产防护 永久免费
FB 三不限源头 - 自助下户充值转款各种主页、账单户、BM户(优势)IPCola原生住宅IP⚡️$1.8/条双ISPFB资源,账单户,分享户,国内一手
TK加白户/二解户/FB海外户/GG老户最大欧洲Nutra网盟BA找量 FB高权重耐操个号⚡️稳定过审FB企业户海外户,授信户,TK加白户
联盟收款/海外资金下发/服贸结汇✔Taboola海外户源头全球效果广告投放平台|Vertoz IngeniousPlex广告位出租
查看: 10298|回复: 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 抓取全站链接* Y) o8 ~; L( r8 _* Q4 f8 D( r4 a
  2.         public static List<string> GetAllHref(string url)% J: S' M# s1 w3 l
  3.         {
    4 r& L8 m* |+ m; d1 o7 V! S, Y
  4.             List<string> allHref = new List<string>();
    & R3 p1 |; O- N0 [" ]
  5.             try
    7 C5 j; o" z6 @* R) K3 c8 e5 N7 x
  6.             {; |' [) w; ~) M, ]+ O
  7.                 string strhtml = soso.getHtml(url, "", true);
    3 |2 _1 Z1 _. D( G7 c! \6 l2 p$ f& ~
  8.                 if (strhtml != "error")
    4 T6 M7 o( I' a" L4 o
  9.                 {
    3 _* P/ m7 g' S5 j- A2 _
  10.                     Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");  ~' `1 x6 R" ]* E
  11.                     MatchCollection mc = reg.Matches(strhtml);5 M( [8 `6 _" e$ O2 n$ J0 G/ ]& N
  12.                     foreach (Match m in mc)
    . B8 }0 B) j1 z5 O+ O
  13.                     {
    / j/ d: E' x7 n3 P/ |
  14.                         Uri uri = new Uri(url);
    3 Z4 F. k! |' t( u  \4 e
  15.                         Uri thisUri = new Uri(uri, m.Groups["url"].Value);
    - a4 i8 e2 y8 |- K2 f
  16.                         string fullUrl = "";
    , B9 x# k$ Q' @9 j0 a7 @
  17.                         if (m.Groups["url"].Value.StartsWith("http"))
    ; u% l* C2 D" O$ `4 Q/ p
  18.                         {
    % H  ?7 R7 g7 Z2 s& d
  19.                             fullUrl = m.Groups["url"].Value;
    8 Z* j5 v3 S* a  m3 S
  20.                         }
    * F; n4 y! e7 t- H
  21.                         else
    : l0 ~0 _, a  S9 r0 C
  22.                         {% e' E7 b) f) w" u! A! P2 N" c0 ?, h; R
  23.                             fullUrl = thisUri.ToString();
    ) j  a. d+ b4 p8 B
  24.                         }
    ; U5 P; g: E( X% _: S" N- b
  25.                         allHref.Add(fullUrl);1 ~1 @$ {5 `6 z2 s. G1 T
  26.                         //Console.WriteLine("原链接:" + m.Groups["url"].Value);
    8 d7 G! `5 A2 ]+ g' K
  27.                         //Console.WriteLine("文本标记:" + m.Groups["text"].Value);
    ) c; _+ Y, _% {6 P) u7 _$ l  e* f! q
  28.                         //Console.WriteLine("补全链接:" + fullUrl);
    1 x6 P" L9 q5 m( h
  29.                         //Console.WriteLine("…………………………………………");" [' V9 c3 W  i3 M) G
  30.                     }$ E7 J$ p# J$ s' H
  31.                 }
    3 ]( I* k4 ?+ P; A+ v9 }2 u9 {: @! e
  32.             }
    7 U/ M3 {7 Y9 l! W4 A$ Y( F
  33.             catch (Exception ex)
    / q6 t9 q7 V  \6 H( O
  34.             { }
    0 u; l, z) A( E/ x
  35.             return allHref;
    6 O! ^- c2 ?- f- U% ^7 F9 v
  36.         }
    % e# G5 V  V3 Q
  37.         #endregion
复制代码

, K1 n) \% D' O: J2 ~+ q# p7 x# I, r' M

  1. ' {9 F6 d) I& M3 T1 m, v/ f
  2. 6 f; Q3 C8 ?! Z; _; F( J" ]6 D. F

  3. ' R8 K  B! @: }0 o
  4. #region 数据去重
    ( K: t- ~: r5 t0 P" f% g9 K
  5.         /// <summary>
    - Q; x( {8 U" F9 i
  6.         /// List<string>去重0 F1 N( b4 q/ v3 [
  7.         /// </summary>8 p7 R- P7 Q& W1 Z+ D
  8.         /// <param name="list"></param>4 |1 T* L- M! m
  9.         /// <returns></returns>
    . i9 _- ]1 ?4 a7 |4 \* I3 P5 x; W
  10.         public static List<string> getUnqueList(List<string> list)0 F5 N' \3 D9 D. L: O6 x- |
  11.         {# w: N2 f. h6 M5 ~" t8 ]
  12.             List<string> list1 = new List<string>();; a# z- `# F* v$ u
  13.             Hashtable hash = new Hashtable();& `* p% i9 h: R* B0 y
  14.             foreach (string s in list)
    7 L) Y8 S( M# E2 C- W- J
  15.             {
    * Q1 N; ^. {) L6 K" q3 ?) U$ z
  16.                 if (!hash.ContainsKey(s))
    : c! c7 C) ?" t
  17.                 {& K# y- b3 Y: ]7 M% p, X$ w
  18.                     hash.Add(s, s);. `5 n) g. A! q9 p; N
  19.                     list1.Add(s);! k+ Q+ K% ~9 A* K. {
  20.                 }
    . B; j: i: \: }4 f) ~
  21.             }0 z7 g  v& s' D. {3 y- H6 {$ k! ~
  22.             hash.Clear();
    / W. s$ [5 g* Q. K7 a
  23.             hash = null;
    / e) d; C9 T4 m' {/ ]; w
  24.             return list1;6 J7 _8 t0 c. r9 C, |
  25.         }
    ' O" F& i; k& r1 S9 h2 r
  26.         #endregion
复制代码
% H% Y* @8 S8 ~: @+ d

7 }$ C& k3 w1 [

点评

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

使用道具 举报

36

主题

215

广告币

298

积分

初级会员

积分
298
 楼主| 发表于 2016-2-26 16:20:16 | 显示全部楼层
" u, Z/ H9 c9 r( @: d
十分感谢!!!非常感谢!!

点评

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

使用道具 举报

2

主题

1487

广告币

1829

积分

高级会员

积分
1829

社区QQ达人

发表于 2016-2-26 16:23:12 | 显示全部楼层
guys 发表于 2016-2-26 16:200 y% e* L0 U2 W. s
十分感谢!!!非常感谢!!

/ v8 h# B& `4 u7 q' e; k' Z缺少一个gethtml,用下面这个:
" H& Z# H( s2 k' x+ a. Z
  1.      public string getHtml(string url, string charSet, bool UseUTF8CharSet)//url是要访问的网站地址,charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码 4 y* d* X$ N3 c2 T6 j5 P1 Y0 ^
  2.         {
    - {1 F. V) z0 i9 F. Z/ D
  3.             string strWebData = "error";
    . b2 w! g; W* C% F
  4.             try( y0 i" A; I. ~$ O' G  K; ]) t
  5.             {
    ) x; \( Z9 Y2 {% `# P
  6.                 WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient
    # S0 M, x& v! Q' B
  7.                 // 需要注意的:
    : G$ A) ]3 ^+ _1 x6 W3 w  q5 H  v
  8.                 //有的网页可能下不下来,有种种原因比如需要cookie,编码问题等等 9 P% }; X; m3 `
  9.                 //这是就要具体问题具体分析比如在头部加入cookie 0 A$ P* V7 T0 [" G$ x: Z& v
  10.                 // webclient.Headers.Add("Cookie", cookie); 0 ~- ]" l1 p- u* v# Y
  11.                 //这样可能需要一些重载方法。根据需要写就可以了
    % ^' ?7 z8 d0 {# r' O/ b& s
  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)");- q: @: j4 U8 w6 P* e: I" K: Z
  13.                 //myWebClient.Headers.Add("User-agent", "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");
    0 ^8 X$ }$ G$ a
  14.                 //获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。
    " S0 m' I! W0 d
  15.                 myWebClient.Credentials = CredentialCache.DefaultCredentials;7 O* z4 o4 j% M" D" a3 `9 Y
  16.                 //如果服务器要验证用户名,密码 3 a/ U, _6 f& Q0 N6 z7 P/ G+ L) S
  17.                 //NetworkCredential mycred = new NetworkCredential(struser, strpassword); # J( ^/ Z2 B9 Y5 Q" w
  18.                 //myWebClient.Credentials = mycred;
    0 F# {' B( m, E( L3 a0 K4 w
  19.                 //从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号)
    ; H: L" X' {; N4 N
  20.                 byte[] myDataBuffer = myWebClient.DownloadData(url);7 @3 U& j: Q2 e
  21.                 strWebData = Encoding.Default.GetString(myDataBuffer);9 e3 Z' }' F3 P3 N
  22. % b  {/ l" @$ u* K
  23.                 //获取网页字符编码描述信息 5 W! ~: f: R% k- F& ^1 ]
  24.                 Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)"", RegexOptions.IgnoreCase | RegexOptions.Multiline);; _; u% P0 {- G0 M; ~2 n
  25.                 string webCharSet = charSetMatch.Groups[2].Value;
    * }( S; t' _: v2 z
  26.                 if (charSet == null || charSet == "")3 T& @3 y* ~& l4 i
  27.                     charSet = webCharSet;' N5 M9 u- g! ^3 g6 k& n
  28.                 if (charSet.Length > 0)8 u0 g. F" E- F% @- K
  29.                 {
    1 `+ U( K4 ?% Q+ d$ D$ {
  30.                     charSet = charSet.Replace(""", "");
    , s9 |6 P4 H2 }! |. M8 _
  31.                 }
    4 i) X2 G( B3 _$ q* n6 r2 O
  32.                 if (UseUTF8CharSet)8 @( \; c4 @8 [/ X; N/ a
  33.                 {7 N; L" ?- I+ ?  W7 ~
  34.                     if (charSet == null || charSet.Length == 0)
    1 b% S1 M, r( I  I& w
  35.                     {
    ' w  d6 C/ G  w5 S7 b: J7 P4 N, f
  36.                         charSet = "utf-8";2 @) O7 N, t1 n" F: x/ \, ~
  37.                     }1 d0 I8 F  Z2 K) I
  38.                 }- n. R  V4 `" ^
  39.                 if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default)
    / s$ b3 G2 \/ V. [( O8 ~5 K
  40.                     strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer);7 M' n; [# i, @, C; s0 u

  41. 9 n6 V$ R& j* @$ ?6 C
  42.             }  X) J( S( g* x  x" E/ K, v
  43.             catch (Exception)
    7 C# i: z, I! Y! H; w. O
  44.             {6 Q. [6 M/ p% c  H
  45.                 strWebData = "error";
    9 E: k8 _4 H  y# H% O" R7 s0 g
  46.             }" q6 C& K" r) f* p" O) J* B
  47. 6 j$ f% V, y- G  P3 {' L
  48.             return strWebData;' K/ D) T- X3 r. i
  49.         }
复制代码

: G  A6 O: a$ W' _/ K$ f
  }, W& K6 S% X1 {; x
回复 支持 反对

使用道具 举报

0

主题

0

广告币

13

积分

新手上路

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-11-8 21:59 , Processed in 0.080004 second(s), 27 queries , Gzip On.

Copyright © 2001-2026, AdvertCN

Proudly Operating in Hong Kong.

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