HttpWebRequest 抓取网页
需要抓取200多个网页的内容然后处理,方法如下,因为网络延迟等问题,在抓取网页内容的时候会有一定的时间大概几秒钟,处理完这200多个网页大概需要200多秒。
现在的问题是:
1. ASP.NET的网页超时是90秒,超过后就看不到显示的结果。
2. 200多秒的时间略长,该怎么样改成多线程的方式来处理。
--------------------编程问答-------------------- 无需多线程,可以通过Ajax异步读取!在你要显示的页面上发起多个请求! --------------------编程问答-------------------- 你想把所有网页抓取的结果以什么样的方式显示,你是把250个页面的内容接合成一个全文本还是想得到个什么样的结果? --------------------编程问答--------------------
// 抓取网页内容
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;
}
抓取每个页面的title,然后顺序显示出来,是用TextBox显示的 --------------------编程问答--------------------
可以在后台用Ajax异步读取么 --------------------编程问答--------------------
后台是没有AJAX一说的,后台可以多线程处理,所以我问的是你想得到一个什么样的结果!
另外线程并非是越多越好 --------------------编程问答--------------------
你想把所有网页抓取的结果以什么样的方式显示,你是把250个页面的内容接合成一个全文本还是想得到个什么样的结果?
抓取每个页面的title,然后顺序显示出来,是用TextBox显示的
只需要title是吗?这好办,你可以用多线程取出title保存到一个集合里,然后对该集合排个序!
补充:.NET技术 , ASP.NET