Можно ли только прочитать и вернуть часть HttpWebResponse.GetResponseStream?

Я искал везде, и я не могу найти ни одного места, которое бы отвечало мне за это... Было бы здорово, если бы кто-нибудь мог помочь.

В общем, я недавно создал программу на C#, которая должна проверять определенные части исходного кода сайта и возвращать URL-адрес при определенном совпадении. Что я сделал до сих пор, так это то, что я перебрал код с помощью цикла while, в зависимости от переменной (member_id), которая увеличивается в каждом цикле (если совпадение не найдено). При каждом цикле исходный код также считывается с веб-сайта домена / профиля / + member_id (где веб-сайт - это имя веб-сайта, очевидно), и его содержимое проверяется на возможные совпадения.

Тем не менее, главная проблема с этим методом заключается в том, что он занимает слишком много времени. Я подсчитал, что если я буду сканировать веб-сайт, используя мой текущий метод, это займет около недели (есть 500 000 страниц, которые я хочу просмотреть. Я не ожидаю, что это будет быстро, но давай...). Мой вопрос в том, есть ли способ решить это? Мне нужна только небольшая, небольшая часть исходного кода с каждой страницы (только head-элемент), поэтому мне кажется немного ненужным читать все остальное, а также.

Вот код, который я сейчас получил (*website* и *match* - это действительно что-то другое):

using System;
using System.Net;
using System.Text;
using System.IO;

    static void Main()
    {

        int member_id = 1;

        while (member_id < 486252) // will change to non-constant value later
        {
            string URL = "http://*website*/profile/" + member_id;
            StringBuilder content = new StringBuilder();
            byte[] b = new byte[310]; // non-constant value will come later...

            HttpWebRequest req = (HttpWebRequest) WebRequest.Create(URL);
            HttpWebResponse res = (HttpWebResponse) req.GetResponse();

            Stream response = res.GetResponseStream();

            int x;
            string translated;

            do
            {
                x = response.Read(b, 0, b.Length);
                if (x != 0)
                {
                    content.Append(Encoding.ASCII.GetString(b, 0, x));
                }
            } while (x > 0);

            member_id++;

            if (content.ToString().Contains("<title>*Match*</title>"))
            {
                Console.WriteLine("Match has been found!"); // Just for debugging
                member_id = 500000; // Lazy, temporary method
            }

            Console.WriteLine(content.ToString()); // Just for debugging
            Console.WriteLine(content.ToString().Length); // Just for debugging
            Console.ReadKey(); // Also just for debugging
        }

    }

Я пытался возиться с размером массива b, параметрами Read и параметрами GetString. Ничего из этого не сработало, хотя я и этого не ожидал. Прямо сейчас я отчаянно нуждаюсь в решении, чтобы быть честным.

Я получил часть, которая на самом деле находит исходный код из учебника, с несколькими личными изменениями. Я начал с C# вчера, хотя некоторое время работал с C++ и некоторыми другими языками (например, PHP). Но в целом мои знания довольно просты, когда дело доходит до программирования, так что будьте понимающими.

Спасибо за прочтение.

0 ответов

Другие вопросы по тегам