Есть ли способ загрузить частичную часть веб-страницы, а не все тело HTML, программно? - PullRequest
3 голосов
/ 26 сентября 2011

Нам нужен только определенный элемент из документа HTML по адресу nytimes.com/technology. Эта страница содержит много статей, но нам нужен только заголовок статьи, который находится в. Если мы используем wget, cURL или любые другие инструменты или какой-либо пакет, такой как запросы в Python , возвращается весь HTML-документ. Можем ли мы ограничить возвращаемые данные определенным элементом, таким как 's?

Ответы [ 3 ]

4 голосов
/ 26 сентября 2011

Протокол HTTP ничего не знает о HTML или DOM. Используя HTTP, вы можете получать частичные документы с поддерживающих веб-серверов, используя заголовок Content-Range, но вам нужно знать смещение байтов данных, которые вы хотите.

Краткий ответ: веб-служба должна поддерживать то, что вы запрашиваете. Это не то, что может быть предоставлено на уровне HTTP.

1 голос
/ 26 сентября 2011

Если вы специально хотите обрабатывать части документа HTML, расположенные по указанному вами URL-адресу, вы, вероятно, ошибаетесь. Если вы просто хотите получить список статей, например, по заголовкам, тогда вам нужен веб-канал. В этом случае Times публикует RSS-канал из этой же категории статей. Обратите внимание, что если вы нажмете эту страницу с помощью браузера, браузер распознает ее как ленту новостей и обработает ее на более высоком уровне, то есть спросит, хотите ли вы подписаться на ленту новостей. Но вы можете поразить это с помощью curl и увидеть непарсированный поток XML. Каждый элемент в ленте будет представлять статью и содержать метаданные, такие как URL-адрес полной статьи, заголовок и т. Д.

Также обратите внимание, что, вероятно, есть какие-то специальные пакеты веб-каналов для используемой языковой платформы, которые обеспечат вам высокий уровень доступа к данным каналов. Это позволит вам написать код вроде:

foreach ( article in feed )
    title = article.getTitle();

вместо того, чтобы разбирать xml самостоятельно.

0 голосов
/ 26 сентября 2011

Да, cURL имеет возможность только загружать заголовки HTML-файлов, а не остальное содержимое.Используйте переключатель -I для выдачи запроса HEAD http.

На странице Man:

-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.
...