当前位置:编程学习 > C#/ASP.NET >>

HttpWebRequest 抓取网页

需要抓取200多个网页的内容然后处理,方法如下,因为网络延迟等问题,在抓取网页内容的时候会有一定的
时间大概几秒钟,处理完这200多个网页大概需要200多秒。
现在的问题是:
1. ASP.NET的网页超时是90秒,超过后就看不到显示的结果。
2. 200多秒的时间略长,该怎么样改成多线程的方式来处理。

// 抓取网页内容
public static void GetHtmlContent(Host host)
    {        
        try
        {
            if (new Ping().Send(host.IP).Status == IPStatus.Success)
            {
                WebRequest request = WebRequest.Create(host.Url);
                using (WebResponse response = request.GetResponse())
                {
                    using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")))
                    {
                        host.Html = reader.ReadToEnd();
                    }
                }
                request.Abort();
            }
            else
            {
                host.Status = "打印机无法连接";
            }
        }
        catch (System.Exception ex)
        {
            host.Html = string.Empty;
            host.Status = ex.Message.ToString();
        }
    }

// 处理网页内容
public static Printer[] GetAllPrinters()
    {
        DataSet ds = SqlHelper.GetAllStores();        
        int count = ds.Tables[0].Rows.Count; // 250个网址
        string[] urls = new string[];
        
        for (int i = 0; i < count; i++) // 这里改成多线程就好了
        {
            urls[i] = ds.Tables[0].Rows[i][0].ToString();            
            Host host = Common.GetHost(urls[i]);
            GetHtmlContent(host) 
        }

        return printers;
    }
--------------------编程问答-------------------- 无需多线程,可以通过Ajax异步读取!在你要显示的页面上发起多个请求! --------------------编程问答-------------------- 你想把所有网页抓取的结果以什么样的方式显示,你是把250个页面的内容接合成一个全文本还是想得到个什么样的结果? --------------------编程问答--------------------
引用 2 楼 sammy_luo 的回复:
你想把所有网页抓取的结果以什么样的方式显示,你是把250个页面的内容接合成一个全文本还是想得到个什么样的结果?

抓取每个页面的title,然后顺序显示出来,是用TextBox显示的 --------------------编程问答--------------------
引用 1 楼 sammy_luo 的回复:
无需多线程,可以通过Ajax异步读取!在你要显示的页面上发起多个请求!

可以在后台用Ajax异步读取么 --------------------编程问答--------------------
引用 4 楼 finkle_zhang 的回复:
Quote: 引用 1 楼 sammy_luo 的回复:

无需多线程,可以通过Ajax异步读取!在你要显示的页面上发起多个请求!

可以在后台用Ajax异步读取么


后台是没有AJAX一说的,后台可以多线程处理,所以我问的是你想得到一个什么样的结果!
另外线程并非是越多越好 --------------------编程问答--------------------
引用 3 楼 finkle_zhang 的回复:
Quote: 引用 2 楼 sammy_luo 的回复:

你想把所有网页抓取的结果以什么样的方式显示,你是把250个页面的内容接合成一个全文本还是想得到个什么样的结果?

抓取每个页面的title,然后顺序显示出来,是用TextBox显示的


只需要title是吗?这好办,你可以用多线程取出title保存到一个集合里,然后对该集合排个序!
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,