Загрузка только первой части (неизвестной длины) веб-страницы с использованием C # - PullRequest
1 голос
/ 10 августа 2011

Я пишу личное приложение, которое собирает данные с веб-сайта. В настоящее время он извлекает целые страницы перед их анализом, и их размер может варьироваться от 300 до 600 КиБ. Всего 10 страниц, которые я тестировал, до 4 МиБ. Страница содержит динамическое содержимое, поэтому я не знаю точно, откуда начинаются данные. У меня есть разделители, так что я знаю, где данные сразу, я отсканировал страницу. Есть ли способ загрузить только ту часть, которая мне нужна? Это сократит общую загрузку до 2 МБ для этих 10 страниц.

Ответы [ 3 ]

3 голосов
/ 10 августа 2011

Просто используйте WebRequest вместо WebClient, тогда вы сможете извлечь только те данные из нужного вам потока:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://google.com");
using (var response = request.GetResponse())
using(Stream stream = response.GetResponseStream())
{
    //..
}
2 голосов
/ 10 августа 2011

Вот простой пример, когда вы читаете из потока, пока не найдете 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 - это метод расширения, который просто сравнивает, если двухсимвольные массивыравных - в этом нет ничего особенного.

0 голосов
/ 10 августа 2011

Разве это не означает, что вы просто должны изменить свою логику: отсканировать все страницы и обработать их, чтобы найти данные -> на чтение страницы, обработать, и если она не содержит требуемых данных, тогда переходите к следующемустраница?

Обладая большим знанием контекста, вы можете настроить способ, которым ваш код сканирует страницы так, чтобы он был оптимальным, сканируя наиболее вероятные страницы с данными для достижения наилучшего результата.

...