0

はじめに、これについて同様のスレッドがあることは知っていますが、Java、Python、Php ではなく C# を使用しています。一部のスレッドは、単一の URL に対するソリューションを提供しますが、これは普遍的ではありません。私にフラグを立てないでくれてありがとう。

そのため、Google アラートを使用して記事へのリンクをメールで取得しています。メールから URL を削除するプログラムと、Web サイトをスクレイピングする別のプログラムを既に作成しました。私の問題は、Google アラート メールのリンクが次のようになっていることです。

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- Elder.html&ct=ga&cd=CAEYACoTOTc2NjE4NjYyNzMzNzc3NDcyODIAODk2NWUwYzRjMzdmOGI4Nzpjb206ZW46VVM&usg=AFQjCNGyK2EyVBLoKnNkdxIBDf8a_B3Ung . ええ、醜い。

これは Google を介して実際の記事にリダイレクトされるため、私のスクレイピング プログラムはこれらのリンクでは機能しません。ここでの質問や他の情報源から、100万の異なる正規表現を試しました。私は実際の記事の 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;
    }        

新しい正規表現であろうと、追加のコードであろうと、エンディングを取り除くのに役立つものがあります。前もって感謝します。

4

1 に答える 1

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
于 2016-08-22T21:02:35.433 に答える