.net 优化了从URL抓取HTML的方法

.net 优化了从URL抓取HTML的方法,.net,httpwebrequest,web-crawler,.net,Httpwebrequest,Web Crawler,有很多问题和答案显示如何从URL获取HTML内容,但我需要一个非常快速的算法,因为我们有很多Web连接要建立 那么,从URL获取内容(通常是HTML)的最有效方法是什么呢?可能有一个更简单的api,但两者都应该可以工作 就运行大量请求而言,您应该使用多个线程或线程池来实现它。如果URL位于同一台服务器上,则应小心不要使其过载 如果您想通过线程池实现它,我可以提供示例 更新 using System; using System.Threading; using System.Collections

有很多问题和答案显示如何从URL获取HTML内容,但我需要一个非常快速的算法,因为我们有很多Web连接要建立

那么,从URL获取内容(通常是HTML)的最有效方法是什么呢?

可能有一个更简单的api,但两者都应该可以工作

就运行大量请求而言,您应该使用多个线程或线程池来实现它。如果URL位于同一台服务器上,则应小心不要使其过载

如果您想通过线程池实现它,我可以提供示例

更新

using System;
using System.Threading;
using System.Collections.Generic;
using System.Net;
using System.IO;

namespace WebClientApp
{
class MainClassApp
{
    private static int requests = 0;
    private static object requests_lock = new object();

    public static void Main() {

        List<string> urls = new List<string> { "http://www.google.com", "http://www.slashdot.org"};
        foreach(var url in urls) {
            ThreadPool.QueueUserWorkItem(GetUrl, url);
        }

        int cur_req = 0;

        while(cur_req<urls.Count) {

            lock(requests_lock) {
                cur_req = requests; 
            }

            Thread.Sleep(1000);
        }

        Console.WriteLine("Done");
    }

private static void GetUrl(Object the_url) {

        string url = (string)the_url;
        WebClient client = new WebClient();
        Stream data = client.OpenRead (url);

        StreamReader reader = new StreamReader(data);
        string html = reader.ReadToEnd ();

        /// Do something with html
        Console.WriteLine(html);

        lock(requests_lock) {
            requests++; 
        }
    }
}
使用系统;
使用系统线程;
使用System.Collections.Generic;
Net系统;
使用System.IO;
命名空间WebClientTapp
{
类MainClassApp
{
私有静态int请求=0;
私有静态对象请求_lock=new object();
公共静态void Main(){
列表URL=新列表{”http://www.google.com", "http://www.slashdot.org"};
foreach(url中的变量url){
QueueUserWorkItem(GetUrl,url);
}
int cur_req=0;
while(cur_req用于设置所有请求并为其提供慷慨的帮助


您将花费大部分时间等待I/O,因此尽可能多地使用多线程。

您能否提供一些使用线程池的示例。请记住,如果您正在处理大量URL(可能有数千个),上述方法将无法正常工作,您将需要某种批处理(一次大概1000人)如果有一种方法可以使投票次数增加10000次,我会这样做,因为它像一个魅力男子一样工作,也可以使用大量的URL。我正在增加超时时间,它像一个魅力男子一样工作。非常感谢Mani,我真的对这里的程序员感到失望,他们只是在重复这个问题,像Jethro,因为Jethro,下面是一个pr如果你想得到分数或更好的工作,你需要思考如何解决问题,而不是告诉别人问题出在哪里kej!这里的一些程序员喜欢自己解决问题,只是想寻求建议,一点建议可以说,这是一个正确的方向。在你在网上发现的关于从URL获取HTML内容的所有问题中,你尝试了多少个?是什么让这个解决方案变慢了,以至于你想尝试并找到一个更快的解决方案?在我看来,好像你希望有人为你做所有的工作,因此投了反对票。