Нам нужен только определенный элемент из HTML-документа по адресу nytimes.com/technology. Эта страница содержит много статей, но нам нужен только заголовок статьи, который находится в формате . Если мы используем wget, cURL или любые другие инструменты или какой-либо пакет, например запросы в Python, весь HTML документ возвращается. Можем ли мы ограничить возвращаемые данные определенным элементом, например 's?
Есть ли способ программно загрузить частичную часть веб-страницы, а не все тело HTML?
Ответы (3)
Протокол HTTP ничего не знает о HTML или DOM. Используя HTTP, вы можете получать частичные документы с поддерживающих веб-серверов, используя заголовок Content-Range
, но вам нужно знать смещения в байтах нужных данных.
Короткий ответ заключается в том, что сам веб-сервис должен поддерживать то, что вы запрашиваете. Это не то, что может быть предоставлено на уровне HTTP.
Если вы специально хотите обработать части HTML-документа, расположенного по указанному вами URL-адресу nytimes, вы, вероятно, делаете это неправильно. Если вам просто нужен список статей, например, по заголовкам, то вам нужен веб-канал. В этом случае Times публикует RSS-канал с этого самого категория статей. Обратите внимание: если вы откроете эту страницу в браузере, браузер распознает ее как фид и обработает на более высоком уровне, т. е. спросит, хотите ли вы подписаться на фид. Но вы можете нажать это с помощью curl и увидеть не проанализированный поток XML. Каждый элемент в ленте будет представлять статью и содержать метаданные, такие как URL-адрес полной статьи, заголовок и т. д.
Также обратите внимание, что, вероятно, существуют некоторые специальные пакеты веб-каналов для любой языковой платформы, которую вы используете, которые предоставят вам высокоуровневый доступ к данным канала. Это позволит вам написать такой код:
foreach ( article in feed )
title = article.getTitle();
вместо того, чтобы анализировать xml самостоятельно.
Да, cURL позволяет только загружать HTML заголовки файлов, а не остальное содержимое. Используйте переключатель -I
для отправки http-запроса HEAD
.
Со страницы руководства:
-I, --head
(HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature the command HEAD which this uses to get nothing but the header of a document. When used on a FTP or FILE file, curl displays the file size and last modification time only.
wget
и cURL
. Это делает вещи, связанные с DOM, теперь более понятными.
- person cdeszaq; 26.09.2011