找回密码
 立即注册

QQ登录

只需一步,快速开始

PropellerAds
Google-Bing-Mediago-Criteo开户
⚡️按条S5代理⚡️静态⚡️独享⚡️5G广告专用虚拟卡/U充值/高返点皇家代理IP⚡️#1性价比⚡️
Mediabuy⚡️玩家开户首选【鲁班跨境通-自助充值转账】FB/GG/TT❤️官方免费开户Affiliate 全媒体流量资源⚡️
Taboola/Outbrain /Bing⚡️一级代理开户投流-7*24h❤️人工在线【官方】❤️搜索套利买量投流开户独立站⚡️开户投放
Google FB TK游戏代投⚡️E.PN 虚拟卡⚡️BINOM TRACKER 60% OFF!比Adplexity还好用的Spy工具
ADPLEXITY + ADVERTCN7200W全球动态不重复住宅IP代理虚拟信用卡+独立站收款全球虚拟卡, 支持U充值
各种主页、账单户、BM户(优势)IPCola原生住宅IP⚡️$1.8/条双ISPTK加白户/二解户/FB海外户/GG老户最大欧洲Nutra网盟BA找量
FB高权重耐操个号⚡️稳定过审FB企业户海外户,授信户,TK加白户联盟收款/海外资金下发/服贸结汇✔Taboola海外户源头
广告位出租虚拟卡返佣1%,国内持牌机构  
查看: 10265|回复: 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 抓取全站链接
    + C; |4 `) C! p7 W$ k- s
  2.         public static List<string> GetAllHref(string url)
    7 Q* I8 E, w% {7 }: Y
  3.         {
    $ m' M% t& _: o+ W% l1 K$ x
  4.             List<string> allHref = new List<string>();* B8 k& P/ h$ P& i. w' {  \1 W% x% ]
  5.             try
    1 v( |5 X) {% o( `
  6.             {- @! M% b& {' ~
  7.                 string strhtml = soso.getHtml(url, "", true);
    : M7 ~8 v1 n0 n; ]  F+ F% H, z
  8.                 if (strhtml != "error")
      e9 d7 A9 a8 R5 a' o
  9.                 {
    ) _! y% e- l$ B
  10.                     Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");* m4 P: E" h* `
  11.                     MatchCollection mc = reg.Matches(strhtml);9 m- b2 k) C: N
  12.                     foreach (Match m in mc)5 v7 ?4 I( S/ b: u- }" |
  13.                     {
    ' |- K5 \9 S3 p9 ]
  14.                         Uri uri = new Uri(url);+ D, `6 Y7 A7 r! Y( t1 s
  15.                         Uri thisUri = new Uri(uri, m.Groups["url"].Value);
    # w7 D% X: x4 s- W1 A8 L0 A
  16.                         string fullUrl = "";
    + z% ~" j  a; x( _( H6 w
  17.                         if (m.Groups["url"].Value.StartsWith("http"))
    # T# b% d4 O, v. \
  18.                         {0 W. G# o3 [1 o( A
  19.                             fullUrl = m.Groups["url"].Value;
    8 X9 d2 y. V6 A$ _  U% z7 O
  20.                         }
    / M: C  Y) {% t- c4 \; P
  21.                         else8 M0 @: z+ |0 z. s( x
  22.                         {! k+ s6 Q. y# k# l, m- O0 {/ V* |" B4 M
  23.                             fullUrl = thisUri.ToString();8 [* ^& F. d5 K, k, G. ^8 L6 P: G
  24.                         }& ]' L0 o' |" ^7 S  \$ B' Z
  25.                         allHref.Add(fullUrl);# O1 }& [( j$ C" ?8 a" \
  26.                         //Console.WriteLine("原链接:" + m.Groups["url"].Value);7 X; L6 Z  ]( I
  27.                         //Console.WriteLine("文本标记:" + m.Groups["text"].Value);0 P7 m& V) |* d: p9 f7 j3 S
  28.                         //Console.WriteLine("补全链接:" + fullUrl);" j+ s0 S6 W- ]; v
  29.                         //Console.WriteLine("…………………………………………");: K2 u9 V$ C  Y3 n9 \
  30.                     }
    , W, S  P3 N. z
  31.                 }5 i8 S, o" r5 l. I" f2 X
  32.             }3 H9 ~7 Q/ E2 G3 q$ [, m- x/ ^
  33.             catch (Exception ex): w: R% q# e; V+ Y$ t2 L' E" R
  34.             { }
    " f7 i" x( p" p+ o3 |
  35.             return allHref;2 Z$ Y( O1 {$ N$ _
  36.         }  _7 i- Z8 R. Y! p- |9 F7 o& E
  37.         #endregion
复制代码
: C* s* l  m9 Z! O9 f

$ e3 a8 b$ y% ^  h6 T5 D; }8 t: x

  1. : F. `8 @) O. j* R# f; x. _/ O9 v

  2. ! d/ }/ X5 d; Z+ W
  3. " z; q& K2 G, ^2 @
  4. #region 数据去重" x; L+ \  @  |+ ]5 r
  5.         /// <summary>* K" P4 O* k4 J. x) m
  6.         /// List<string>去重
    ' {& m, V1 H$ R( k; |' K
  7.         /// </summary>- l. t8 Z- W; l# N
  8.         /// <param name="list"></param>
    9 b, P! h1 {# {. N3 r0 k
  9.         /// <returns></returns>
    % i" r( c6 P1 ~& e; \( {+ r3 y  z
  10.         public static List<string> getUnqueList(List<string> list)
    ( C* @: D" x" @! O' _
  11.         {
    + ^7 o8 e  e, q) ?& ^
  12.             List<string> list1 = new List<string>();
    # N2 Q: G# D3 r! b6 R( _4 C7 {. a1 r2 G
  13.             Hashtable hash = new Hashtable();
    $ ^( I; O0 W  P5 o4 P
  14.             foreach (string s in list)0 O4 X+ Y; M2 n. g: `7 w6 W
  15.             {$ q1 G6 Y; u+ W/ K# u# Z7 n
  16.                 if (!hash.ContainsKey(s))
    4 k1 `# a  \7 a0 |; I
  17.                 {
    9 m% I$ q' R0 g! F  _; ?1 G
  18.                     hash.Add(s, s);+ k0 @2 D, X- \' |  M
  19.                     list1.Add(s);
    " g4 W/ _; ~# y: [7 D; D
  20.                 }7 L3 S9 ], B4 I4 l/ s3 e  ?) i
  21.             }2 j3 D( ^; G9 M% {( c8 h+ l
  22.             hash.Clear();% Q' I( n! B' ^2 `6 |( E' m5 X! o
  23.             hash = null;
    6 j/ A. m5 U4 l' x, T! K9 T) F3 G
  24.             return list1;5 r6 [! Z- h2 W
  25.         }
    7 d3 x) E: U* V1 q1 W+ q2 ]% p
  26.         #endregion
复制代码

' }" Z! o6 ]$ f/ Q
9 ]: g8 `3 I9 g& |+ L

点评

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

使用道具 举报

36

主题

215

广告币

298

积分

初级会员

积分
298
 楼主| 发表于 2016-2-26 16:20:16 | 显示全部楼层
! M! w! _) `' Q% P8 L/ ~$ {% n
十分感谢!!!非常感谢!!

点评

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

使用道具 举报

2

主题

1487

广告币

1829

积分

高级会员

积分
1829

社区QQ达人

发表于 2016-2-26 16:23:12 | 显示全部楼层
guys 发表于 2016-2-26 16:20/ t, g5 f5 l! f4 Y
十分感谢!!!非常感谢!!
% [, ?9 P) F3 u5 k. B
缺少一个gethtml,用下面这个:8 Q/ e$ d! w! U
  1.      public string getHtml(string url, string charSet, bool UseUTF8CharSet)//url是要访问的网站地址,charSet是目标网页的编码,如果传入的是null或者"",那就自动分析网页的编码 5 N2 t  d& H: l8 Q1 S/ }; L8 D& \" K
  2.         {
    2 V* B4 e! H/ @" P2 _
  3.             string strWebData = "error";# s% y- q7 v: z5 ]; M
  4.             try5 Y% H* f& [( j* m9 o
  5.             {
    & ]* S( X, t6 U
  6.                 WebClient myWebClient = new WebClient(); //创建WebClient实例myWebClient   [( P) q' `3 F6 j4 B. K
  7.                 // 需要注意的: 4 U4 [8 E* i, B1 M
  8.                 //有的网页可能下不下来,有种种原因比如需要cookie,编码问题等等
      D* F1 r8 n5 ~; l
  9.                 //这是就要具体问题具体分析比如在头部加入cookie . m! E. _0 p& @
  10.                 // webclient.Headers.Add("Cookie", cookie);
    ; \, m/ Q5 A  S1 `9 G& }
  11.                 //这样可能需要一些重载方法。根据需要写就可以了
    3 |, T2 L+ n6 x6 t; d
  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)");
    % X. [; i) T& v3 Z1 `+ d
  13.                 //myWebClient.Headers.Add("User-agent", "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)");
    9 Z! c7 |: f2 d$ x( w2 m
  14.                 //获取或设置用于对向 Internet 资源的请求进行身份验证的网络凭据。
    $ q. D9 {; x1 T- `
  15.                 myWebClient.Credentials = CredentialCache.DefaultCredentials;
    2 `; V+ J; z0 [! S8 l" D
  16.                 //如果服务器要验证用户名,密码 & l2 s0 P' y7 _% H9 z7 o) ~3 |
  17.                 //NetworkCredential mycred = new NetworkCredential(struser, strpassword); / O% ]% g8 h( O2 c+ z2 g" N3 N
  18.                 //myWebClient.Credentials = mycred; $ y' {0 M4 M4 p
  19.                 //从资源下载数据并返回字节数组。(加@是因为网址中间有"/"符号) ; D( N6 s; Z( m
  20.                 byte[] myDataBuffer = myWebClient.DownloadData(url);
    5 k! A2 R: |* M/ h# e- J
  21.                 strWebData = Encoding.Default.GetString(myDataBuffer);
    & D# H/ @1 `0 o( q* v+ q& O8 z- @

  22. $ O/ ~& G3 Z2 o9 P9 z8 V/ ?$ a
  23.                 //获取网页字符编码描述信息
    ; k3 |7 A5 v" l0 a% o5 G! \" b8 D6 g* Z
  24.                 Match charSetMatch = Regex.Match(strWebData, "<meta([^<]*)charset=([^<]*)"", RegexOptions.IgnoreCase | RegexOptions.Multiline);
    : f  L! [" K* V; D
  25.                 string webCharSet = charSetMatch.Groups[2].Value;
    + U" H/ C8 y7 o7 ~7 g7 ~
  26.                 if (charSet == null || charSet == "")" Z. N3 J- T( s+ }" R  d/ }$ K
  27.                     charSet = webCharSet;
    * k9 d. u# `( b$ R5 O% C! K+ U$ v
  28.                 if (charSet.Length > 0)
    2 R  `% B4 ?1 w
  29.                 {
    ! Y; P, T: }) b
  30.                     charSet = charSet.Replace(""", "");- W4 C! a. B+ \; I
  31.                 }7 J! G1 _4 p2 s! q3 L) u
  32.                 if (UseUTF8CharSet)
    & M6 ^, W6 K$ m4 k
  33.                 {
    ' j+ P* g. l/ H/ x1 A
  34.                     if (charSet == null || charSet.Length == 0)" t) }) f4 N: \$ X
  35.                     {7 x( ~4 M, n5 }: \# s
  36.                         charSet = "utf-8";
    2 g3 D- G& k$ D
  37.                     }4 a8 e" |5 H8 i( w
  38.                 }
    9 y9 C3 b4 L  y0 \7 d$ V8 c: v
  39.                 if (charSet != null && charSet != "" && Encoding.GetEncoding(charSet) != Encoding.Default)! K5 Q8 T# A  |9 d! P
  40.                     strWebData = Encoding.GetEncoding(charSet).GetString(myDataBuffer);( A3 S' W* k% z7 E& b; C3 D# I

  41. : L3 n+ ~0 ]- E) I+ P" n% ]9 b& i
  42.             }. J# f8 e+ @% i$ K5 k# k
  43.             catch (Exception)
    - C) s* B% I# |$ y& [( U
  44.             {$ V" K" E" C  @+ f. x
  45.                 strWebData = "error";, C" v* j1 i) I1 m
  46.             }/ [- B) `0 g$ I) t. u! e$ y7 l
  47. % Y5 n& Q/ H: O9 |
  48.             return strWebData;
    5 g7 ]6 k! b3 u/ j+ M( ~& }2 x
  49.         }
复制代码
0 D! b$ r( T" G

8 i1 c% @9 e9 }# c
回复 支持 反对

使用道具 举报

0

主题

0

广告币

13

积分

新手上路

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-18 19:26 , Processed in 0.074860 second(s), 27 queries , Gzip On.

Copyright © 2001-2026, AdvertCN

Proudly Operating in Hong Kong.

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