![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Есть задачка с веб-страницами [D6, XP]
slavikdr © (2008-06-11 22:30:00)Здравствуйте. Тут жизнь поставила задачку.
Есть веб-страница, например такая:
http://www.vashmagazin.ua/cat/catalog/?rub=302&subrub=1&item_price1=&item_price2=&page=2
Нужно ее проанализировать, отсеять рекламу и все объявления записать в БД для последующего анализа. Ну с БД я уж как нибудь сам разберусь, когда то подавал надежды как програмист, писал на Делфи.
Но во с какой стороны подойти к веб-странице - я даже не представляю.
Я не знаю какими компонентами пользоваться для установки http соединения, не знаю как прочитать наполнение страницы, не знаю еще много чего.
Вообщем подскажите, с чего начать? Справлюсь ли я с этой задачей на Д6 (последняя версия на которой писал четыре года назад).
Если поможете начать - дальше я уже справлюсь.
Буду благодарен любому ответу.
slavikdr (2008-06-15 08:52:00) [1]
> После чего можно будет разбирать страничку через документный
> объект
А можно здесь поподробней - что за документный объект такой?
palva (2008-06-12 13:42:00) [2]Заглянул на страничку и ее html-код. Там просто вызов скрипта, лежащего на сервере. Так что саму страничку сканировать особого смысла нет, данных там не найдете. Нужно загрузить URL в TWebBrowser, браузер сгрузит и выполнит необходимые скрипты. После чего можно будет разбирать страничку через документный объект. Но и здесь могут быть подводные камни, если авторы сайта приложили усилия, чтобы затруднить скачивание информации программой.
Anatoly Podgoretsky (2008-06-12 13:17:00) [3]С Дельфи идут примеры, только по Интернет для Д6 10 примеров.
Плохиш (2008-06-12 11:36:00) [4]
> slavikdr © (12.06.08 10:49) [11]
> > Прочитать про программирование для сети с помищью делфи.
>
> Буду признателен за линк где почитать
Не знаю как в Д6, а в Д7 описание этого занимает больше половины руководства для разработчика. Документацию можно попытаться найти на сайте борланда или кодегера.
slavikdr (2008-06-12 10:49:00) [5]> Прочитать про программирование для сети с помищью делфи.
Буду признателен за линк где почитать
>Вот если тебе ответят "нет", то даже пытаться не будешь?
Меня интересовала версия делфи которая подходит для моей задачи.
З.Ы. Уже пытаюсь
Плохиш (2008-06-12 10:26:00) [6]
> Вообщем подскажите, с чего начать?
Прочитать про программирование для сети с помищью делфи.
> Справлюсь ли я с этой задачей на Д6
Вот если тебе ответят "нет", то даже пытаться не будешь?
Германн (2008-06-12 01:02:00) [7]
> Игорь Шевченко © (12.06.08 00:53) [8]
У меня промелькнула эта мысль. Но увы уже после "Добавить" :(
Игорь Шевченко (2008-06-12 00:53:00) [8]Германн © (12.06.08 00:45) [7]
Не буди лихо
Германн (2008-06-12 00:45:00) [9]
> McSimm © (11.06.08 22:36) [2]
>
> чуть не удалил, натурально как спам выглядит :)
>
> Anatoly Podgoretsky © (11.06.08 22:54) [5]
>
> > McSimm (11.06.2008 22:36:02) [2]
>
> То же самое :-)
>
Похоже. Но количество текста в спаме, как правило, меньше.
P.S. А что есть спам от имени © авторов?
Тын-Дын (2008-06-11 23:03:00) [10]
> slavikdr © (11.06.08 22:30)
> Нужно ее проанализировать,
////////////////////////////////////////////////////////////////////////////////
//
// Демо получения HTML кода страницы
// Автор: Александр (Rouse_) Багель
// c Fangorn Wizards Lab 1998 - 2003
// 19 января 2003
unit GetUrl;
interface
uses
Windows, Wininet;
const
HTTP_PORT = 80;
CRLF = #13#10;
Header = 'Content-Type: application/x-www-form-urlencoded' + CRLF;
function GetPage(const URL: String): String;
implementation
function DelHttp(URL: String): String;
begin
if Pos('http://', URL) > 0 then Delete(Url, 1, 7);
Result := Copy(Url, 1, Pos('/', Url) - 1);
if Result = '' then Result := URL + #0;
end;
function GetPage(const URL: String): String;
var
FSession, FConnect, FRequest: HINTERNET;
FHost, FScript, SRequest: String;
Ansi: PAnsiChar;
Buff: array [0..1023000] of Char;
BytesRead: Cardinal;
Res, Len: DWORD;
begin
Result := '';
// Небольшой парсинг
// вытаскиваем имя хоста и параметры обращения к скрипту
FHost := DelHttp(Url);
FScript := Url;
Delete(FScript, 1, Pos(FHost, FScript) + Length(FHost));
//FScript := FHost + '/' +FScript;
// Инициализируем WinInet
FSession := InternetOpen('DMFR', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if not Assigned(FSession) then Exit;
try
// Попытка соединения с сервером
FConnect := InternetConnect(FSession, PChar(FHost), HTTP_PORT, nil,
'HTTP/1.0', INTERNET_SERVICE_HTTP, 0, 0);
if not Assigned(FConnect) then Exit;
try
// Подготавливаем запрос страницы
Ansi := 'text/*';
FRequest := HttpOpenRequest(FConnect, 'GET', PChar(FScript), 'HTTP/1.1',
nil, @Ansi, INTERNET_FLAG_RELOAD, 0);
if not Assigned(FConnect) then Exit;
try
// Добавляем заголовки
if not (HttpAddRequestHeaders(FRequest, Header, Length(Header),
HTTP_ADDREQ_FLAG_REPLACE or
HTTP_ADDREQ_FLAG_ADD or
HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA)) then Exit;
// Проверяем запрос:
Len := 0;
Res := 0;
SRequest := ' ';
HttpQueryInfo(FRequest, HTTP_QUERY_RAW_HEADERS_CRLF or
HTTP_QUERY_FLAG_REQUEST_HEADERS, @SRequest[1], Len, Res);
if Len > 0 then
begin
SetLength(SRequest, Len);
HttpQueryInfo(FRequest, HTTP_QUERY_RAW_HEADERS_CRLF or
HTTP_QUERY_FLAG_REQUEST_HEADERS, @SRequest[1], Len, Res);
end;
// Отправляем запрос
if not (HttpSendRequest(FRequest, nil, 0, nil, 0)) then Exit;
// Получаем ответ
FillChar(Buff, SizeOf(Buff), 0);
repeat
Result := Result + Buff;
FillChar(Buff, SizeOf(Buff), 0);
InternetReadFile(FRequest, @Buff, SizeOf(Buff), BytesRead);
until BytesRead = 0;
finally
InternetCloseHandle(FRequest);
end;
finally
InternetCloseHandle(FConnect);
end;
finally
InternetCloseHandle(FSession);
end;
end;
end.
Анализ придётся вручную проводить.
Либо получи в TWebBrowser (не показывая), там проще ссылки будет разбирать.
Anatoly Podgoretsky (2008-06-11 22:54:00) [11]> McSimm (11.06.2008 22:36:02) [2]
То же самое :-)
McSimm (2008-06-11 22:40:00) [12]* имелось в виду "получить html..."
slavikdr (2008-06-11 22:39:00) [13]to McSimm ©
правильный подход знаю, но сайт не мой. А купить их БД - дорого, если вообще возможно. Так что наверно придется работать со строками.
McSimm (2008-06-11 22:36:00) [14]чуть не удалил, натурально как спам выглядит :)
Правильный подход - научить сайт предоставлять информацию в удобном для импорта виде, например xml.
Для доступа по http можно попробовать Indy компоненты. Получить http, дальше работа со строками и ничего больше.
DVM (2008-06-11 22:33:00) [15]
> Я не знаю какими компонентами пользоваться для установки
> http соединения
TIdHTTP, например
> не знаю как прочитать наполнение страницы,
IdHTTP.Get()
> Справлюсь ли я с этой задачей на Д6
Лучше взять D7, а то в 6 нет вроде Indy