在C#中使用Httpclient下载网址内容

时间:2017-08-09 16:34:02

标签: c# url parallel-processing

我正在尝试使用以下方法下载网址内容。

public static async Task<string> getURL(string link)
        {
            string result = "";
            using (HttpClient client = new HttpClient())
            using (HttpResponseMessage response = await client.GetAsync(link))
            using (HttpContent content = response.Content)
            {

                result = await content.ReadAsStringAsync();


            }
            return result;
        }

以前我是通过HtmlAgilitypack的HtmlWeb.Load()方法直接加载url。 但它需要花费很多时间,并且我不能将代码放在并行for或foreach循环中(抛出了许多异常,程序在几百次迭代后结束。我尝试了3个并行线程,没有任何改进)。在网上搜索后,我发现编写自己的网址下载方法可能是一个好主意。但我不知道如何传递一个网址并从上面的方法获取网址内容,我从here复制了 有任何想法吗? 编辑: 来电方法如下

public static void Download(string link)
        {
            HtmlWeb htmlWeb = new HtmlWeb();
           htmlWeb.OverrideEncoding = Encoding.UTF8;
           HtmlAgilityPack.HtmlDocument document = new HtmlDocument();
           document = htmlWeb.Load(getURL(link));
            if(document != null)
            {
                if(document.DocumentNode.SelectSingleNode("//div[@class='urdu_results']") != null)
                    Console.WriteLine(link);
                    Console.WriteLine(count--);
                {
                    if(document.DocumentNode.SelectNodes(".//div[@class='u']") != null && document.DocumentNode.SelectNodes(".//div[@class='r']") != null)
                    {
                        var uNodes = document.DocumentNode.SelectNodes(".//div[@class='u']");
                        var rNodes = document.DocumentNode.SelectNodes(".//div[@class='r']");
                        if(uNodes.Count == rNodes.Count)
                        {
                            for(int i=0;i<uNodes.Count;i++)
                            {
                                string u = uNodes[i].InnerText.Trim();
                                string r = rNodes[i].InnerText.Trim();
                                string word = u+"\t"+r;
                                if(!words.Contains(word))
                                {
                                File.AppendAllText(output, word+Environment.NewLine);
                                Console.WriteLine(r);
                                words.Add(word);
                                }
                            }
                        }
                    }
                }
            }
        }

0 个答案:

没有答案