извлечь данные HTML без загрузки всей веб-страницы

Как я могу извлечь данные таблицы HTML из веб-страницы, не загружая весь HTML-код веб-страницы?

Я использую TWebBrowser и TEmbededWB в Delphi XE2 для загрузки страницы, а затем получаю элемент Table и анализирую его. но веб-страница очень тяжелая, и в моем цикле (около 60 секунд) я не могу правильно получить данные.

С Уважением


person SadeghAlavizadeh    schedule 08.08.2012    source источник
comment
Вы можете загрузить его через поток и отбросить ненужные биты, что будет более эффективно, чем загружать все это в память. Однако невозможно просто запросить определенные биты, если только сервер не поддерживает это, чего обычно не делают веб-серверы.   -  person mellamokb    schedule 08.08.2012
comment
И даже тогда вам нужно знать, где находятся начальный и конечный байты таблицы.   -  person Quentin    schedule 08.08.2012
comment
как я могу скачать его через поток? и как мне его разобрать? Это htmldocument, который я могу разобрать с помощью MSHTML или нет?   -  person SadeghAlavizadeh    schedule 08.08.2012
comment
Нужно ли вашему конечному пользователю также видеть веб-страницу? Если нет, используйте компонент Indy HTTP Client (TIdHttp) и выполните получение или отправку. Это доставит его вам в потоковой форме без накладных расходов браузера на синтаксический анализ и рендеринг HTML.   -  person Sam M    schedule 08.08.2012
comment
Synapse также хорошая библиотека HTTP. Ваш вопрос не ясен. Что вы называете веб-страницей? только корневая страница HMTL? или сотни файлов, стили html и css, программы js, рекламные объявления в формате html, субфреймы html, музыка и видео, и кто знает, что еще? Протокол HTTP позволяет вам загружать только часть файла, от байта #12345 до байта #54321, но 1: не все серверы позволяют это и 2: как теперь узнать, какие байты вам нужны, не загружая страницу? Так что вам все равно придется скачать основной файл HMTL. Но вы можете избежать загрузки всех или большинства вспомогательных файлов.   -  person Arioch 'The    schedule 09.08.2012
comment
вы также можете попросить сервер отправить вам страницу в ZIP- или GZIP-формате, если сервер умеет упаковывать, а ваша программа знает, как распаковывать, немного уменьшая трафик. Но если бы ваша таблица была не в main fail, а в каком-то aux файле, то вам пришлось бы ее вместо нее скачать и вычислить ее адрес. Есть много библиотек для загрузки файла через HTTP. Indy, Synapse, Microsoft BITS, JediCodeLib HTTP Grabber и многое другое. Затем вам нужно будет получить какой-нибудь парсер HTML (парсеры XML будут анализировать действительные страницы XHTML, но могут отказать в анализе HTML-страницы или неработающей реальной XHTML-страницы). Вы можете искать парсеры HTML здесь или на torry.net   -  person Arioch 'The    schedule 09.08.2012
comment
спасибо, я задал другой вопрос. [stackoverflow.com/questions/11915903/   -  person SadeghAlavizadeh    schedule 11.08.2012


Ответы (1)


Мужчина,

Поскольку язык протокола HTML интерпретируется, а не компилируется, браузер или любая реализация класса, работающая как браузер, должна загружать весь контент с сервера. Вы можете узнать больше об этом, прочитав Как работают браузеры и Safari . Я считаю, что не существует эффективного способа сделать то, что вы просили, хотя, на мой взгляд, очень эффективным методом было бы сделать как mellamokb сказал. Но он все равно будет загружать весь контент.

[]'s

person Rodrigo Reis    schedule 21.08.2012