Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用C语言只下载网页的第一部分(长度未知)#_C#_.net_Screen Scraping_Web Scraping - Fatal编程技术网

C# 使用C语言只下载网页的第一部分(长度未知)#

C# 使用C语言只下载网页的第一部分(长度未知)#,c#,.net,screen-scraping,web-scraping,C#,.net,Screen Scraping,Web Scraping,我正在写一个个人应用程序,可以从网站上抓取数据。目前,它会在分析之前提取整个页面,这些页面的大小可以在300-600kib之间。我测试的10个页面总共有4个MiB。该页面包含动态内容,因此我不知道数据从何处开始。我确实有分隔符,以便在扫描页面后立即知道数据的位置。有没有办法只下载到我需要的部分?这将使这10个页面的总下载量减少到2 MiB。只需使用WebRequest而不是WebClient,您就可以从流中检索所需的数据: HttpWebRequest request = (HttpWebReq

我正在写一个个人应用程序,可以从网站上抓取数据。目前,它会在分析之前提取整个页面,这些页面的大小可以在300-600kib之间。我测试的10个页面总共有4个MiB。该页面包含动态内容,因此我不知道数据从何处开始。我确实有分隔符,以便在扫描页面后立即知道数据的位置。有没有办法只下载到我需要的部分?这将使这10个页面的总下载量减少到2 MiB。

只需使用
WebRequest
而不是
WebClient
,您就可以从流中检索所需的数据:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://google.com");
using (var response = request.GetResponse())
using(Stream stream = response.GetResponseStream())
{
    //..
}

只需使用
WebRequest
而不是
WebClient
,即可从流中检索所需的数据:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://google.com");
using (var response = request.GetResponse())
using(Stream stream = response.GetResponseStream())
{
    //..
}

这难道不需要您将逻辑从抓取所有页面并对其进行处理以查找数据->更改为读取页面、处理,如果该页面不包含您想要的数据,则继续下一页吗


有了更多关于上下文的知识,您可以自定义代码对页面进行爬网的方式,以便通过对最有可能的页面进行爬网来获得最佳结果

这难道不需要您将逻辑从抓取所有页面并对其进行处理以查找数据->更改为读取页面、处理,如果页面中不包含您想要的数据,则继续下一页吗


有了更多关于上下文的知识,您可以自定义代码对页面进行爬网的方式,以便通过对最有可能的页面进行爬网来获得最佳结果

下面是一个简单的示例,在这个示例中,您从一个流中读取数据,直到匹配一个与您自己的数据流相匹配的10字节分隔符。虽然具体细节由你来处理,但我认为这代表了一种实现你想要的东西的简单方法

StringBuilder sb = new StringBuilder();
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com");
using (var resp = request.GetResponse())
{
    using(StreamReader sr = new StreamReader(resp.GetResponseStream()))
    {
        char[10] block;
        sr.ReadBlock(block, 0, 10);
        if (block.CharEquals(myDelim))
            break;
        sb.Append();
    }
}
// Process the StringBuilder here.

请注意,
CharEquals
是一种扩展方法,它可以简单地比较两个字符数组是否相等-没有什么特别之处。

这里是一个简单的示例,您从流中读取数据,直到匹配与您自己的10字节分隔符为止。虽然具体细节由你来处理,但我认为这代表了一种实现你想要的东西的简单方法

StringBuilder sb = new StringBuilder();
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com");
using (var resp = request.GetResponse())
{
    using(StreamReader sr = new StreamReader(resp.GetResponseStream()))
    {
        char[10] block;
        sr.ReadBlock(block, 0, 10);
        if (block.CharEquals(myDelim))
            break;
        sb.Append();
    }
}
// Process the StringBuilder here.
请注意,
CharEquals
是一种扩展方法,它可以简单地比较两个字符数组是否相等-没有什么特别之处