2016-08-22 69 views
0

前言,我知道有类似的线程关于这个,但我使用C#,而不是Java,或Python或PHP。一些线程为单个URL提供了一个解决方案,这不是通用的。谢谢你不要打我。我需要去掉谷歌快讯网址

因此,我使用Google快讯通过电子邮件获取文章链接。我已经编写了一个程序,可以删除电子邮件中的URL以及另一个程序来删除网站。我的问题是,谷歌提醒电子邮件中的链接如下所示:

https://www.google.com/url?rct=j&sa=t&url=http://www.foxnews.com/health/2016/08/19/virtual-reality-treadmills-help-prevent-falls-in-elderly.html&ct=ga&cd=CAEYACoTOTc2NjE4NjYyNzMzNzc3NDcyODIaODk2NWUwYzRjMzdmOGI4Nzpjb206ZW46VVM&usg=AFQjCNGyK2EyVBLoKnNkdxIBDf8a_B3Ung。是啊,丑陋。

因为这通过谷歌重定向到实际文章,我的scraping程序不适用于这些链接。我从这里和其他来源的问题中尝试了一百万个不同的RegEx。我设法剥去了一切,直到实际文章的http://,但它仍然有尾部螺丝拧紧。这是我到目前为止。他们现在的样子:

http://www.foxnews.com/health/2016/08/19/virtual-reality-treadmills-help-prevent-falls-in-elderly.html&ct=ga&cd=CAEYACoTOTc2NjE4NjYyNzMzNzc3NDcyODIaODk2NWUwYzRjMzdmOGI4Nzpjb206ZW46VVM&usg=AFQjCNGyK2EyVBLoKnNkdxIBDf8a_B3Ung

private List<string> GetLinks(string message) 
    { 
     List<string> list = new List<string>(); 
     Regex urlRx = new Regex(@"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)", RegexOptions.IgnoreCase); 

     MatchCollection matches = urlRx.Matches(message); 
     foreach (Match match in matches) 
     { 
      if(!match.ToString().Contains("news.google.com/news") && !match.ToString().Contains("google.com/alerts")) 
      { 
       string find = "=http"; 
       int ind = match.ToString().IndexOf(find);      
       list.Add(match.ToString().Substring(ind+1)); 
      }     
     } 
     return list; 
    }   

一些帮助摆脱的结局将是真棒,是一个新的正则表达式或一些额外的代码。提前致谢。

回答

1

您可以使用HttpUtility.ParseQueryString来检索查询字符串的url部分。它位于System.Web命名空间(需要参考)。

var uri = new Uri("https://www.google.com/url?rct=j&sa=t&url=http://www.foxnews.com/health/2016/08/19/virtual-reality-treadmills-help-prevent-falls-in-elderly.html&ct=ga&cd=CAEYACoTOTc2NjE4NjYyNzMzNzc3NDcyODIaODk2NWUwYzRjMzdmOGI4Nzpjb206ZW46VVM&usg=AFQjCNGyK2EyVBLoKnNkdxIBDf8a_B3Ung"); 
var queries = HttpUtility.ParseQueryString(uri.Query); 
var foxNews = queries["url"]; //http://www.foxnews.com/health/2016/08/19/virtual-reality-treadmills-help-prevent-falls-in-elderly.html 
+0

哇,这非常简单。非常感谢! –