Только чтение заголовка и / или тега META файла HTML без загрузки полного файла HTML - PullRequest
2 голосов
/ 03 августа 2011

Сценарий:

Мне нужно проанализировать миллионы HTML-файлов / страниц (насколько это возможно), а затем прочитать только заголовок или мета-часть и отправить их в базу данных

Я использую System.Net.WebClient класса DownloadString(url_path) для загрузки, а затем сохранения его в базе данных с помощью LINQ To SQL

Но эта DownloadString функция дает мне полный источник HTML, мне просто нужны только часть заголовка и часть тега META.

Любые идеи, чтобы загрузить только столько контента?

Ответы [ 3 ]

1 голос
/ 03 августа 2011

Я думаю, что вы можете открыть поток с этим URL и использовать этот поток для чтения первых x байтов, я не могу сказать точное число, но я думаю, что вы можете установить его на разумное число, чтобы получить заголовок и описание.

HttpWebRequest fileToDownload = (HttpWebRequest)HttpWebRequest.Create("YourURL");
            using (WebResponse fileDownloadResponse = fileToDownload.GetResponse())
            {
                using (Stream fileStream = fileDownloadResponse.GetResponseStream())
                {
                    using (StreamReader fileStreamReader = new StreamReader(fileStream))
                    {
                        char[] x = new char[Number];
                        fileStreamReader.Read(x, 0, Number);
                        string data = "";
                        foreach (char item in x)
                        {
                            data += item.ToString();
                        }
                    }
                }
            }
0 голосов
/ 03 августа 2011

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

В зависимости от того, для чего вы этого хотите, у многих полуприличных веб-сайтов есть настраиваемая страница 404, которая намного проще, чем известная страница. Имеет ли это информацию, к которой вы стремитесь, это другой вопрос.

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

Вы можете использовать глагол "HEAD" в запросе HttpWebRequest, чтобы вернуть заголовки ответа (не элемент. Чтобы получить полный элемент с метаданными, вам нужно загрузить страницу и проанализировать метаданные, которые вы хотите.

System.Net.WebRequest.Create(uri) { Method = "HEAD" };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...