Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.07.13;
Скачать: CL | DM;

Вниз

Есть задачка с веб-страницами   Найти похожие ветки 

 
slavikdr ©   (2008-06-11 22:30) [0]

Здравствуйте. Тут жизнь поставила задачку.
Есть веб-страница, например такая:
http://www.vashmagazin.ua/cat/catalog/?rub=302&subrub=1&item_price1=&item_price2=&page=2
Нужно ее проанализировать, отсеять рекламу и все объявления записать в БД для последующего анализа. Ну с БД я уж как нибудь сам разберусь, когда то подавал надежды как програмист, писал на Делфи.
Но во с какой стороны подойти к веб-странице - я даже не представляю.
Я не знаю какими компонентами пользоваться для установки http соединения, не знаю как прочитать наполнение страницы, не знаю еще много чего.
Вообщем подскажите, с чего начать? Справлюсь ли я с этой задачей на Д6 (последняя версия на которой писал четыре года назад).
Если поможете начать - дальше я уже справлюсь.
Буду благодарен любому ответу.


 
DVM ©   (2008-06-11 22:33) [1]


> Я не знаю какими компонентами пользоваться для установки
> http соединения

TIdHTTP, например


> не знаю как прочитать наполнение страницы,

IdHTTP.Get()


> Справлюсь ли я с этой задачей на Д6

Лучше взять D7, а то в 6 нет вроде Indy


 
McSimm ©   (2008-06-11 22:36) [2]

чуть не удалил, натурально как спам выглядит :)

Правильный подход - научить сайт предоставлять информацию в удобном для импорта виде, например xml.

Для доступа по http можно попробовать Indy компоненты. Получить http, дальше работа со строками и ничего больше.


 
slavikdr ©   (2008-06-11 22:39) [3]

to McSimm ©
правильный подход знаю, но сайт не мой. А купить их БД - дорого, если вообще возможно. Так что наверно придется работать со строками.


 
McSimm ©   (2008-06-11 22:40) [4]

* имелось в виду "получить html..."


 
Anatoly Podgoretsky ©   (2008-06-11 22:54) [5]

> McSimm  (11.06.2008 22:36:02)  [2]

То же самое :-)


 
Тын-Дын ©   (2008-06-11 23:03) [6]


> 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 (не показывая), там проще ссылки будет разбирать.


 
Германн ©   (2008-06-12 00:45) [7]


> 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-12 00:53) [8]

Германн ©   (12.06.08 00:45) [7]

Не буди лихо


 
Германн ©   (2008-06-12 01:02) [9]


> Игорь Шевченко ©   (12.06.08 00:53) [8]

У меня промелькнула эта мысль. Но увы уже после "Добавить" :(


 
Плохиш ©   (2008-06-12 10:26) [10]


> Вообщем подскажите, с чего начать?

Прочитать про программирование для сети с помищью делфи.

> Справлюсь ли я с этой задачей на Д6

Вот если тебе ответят "нет", то даже пытаться не будешь?


 
slavikdr ©   (2008-06-12 10:49) [11]

> Прочитать про программирование для сети с помищью делфи.
Буду признателен за линк где почитать

>Вот если тебе ответят "нет", то даже пытаться не будешь?
Меня интересовала версия делфи которая подходит для моей задачи.
З.Ы. Уже пытаюсь


 
Плохиш ©   (2008-06-12 11:36) [12]


> slavikdr ©   (12.06.08 10:49) [11]
> > Прочитать про программирование для сети с помищью делфи.
>
> Буду признателен за линк где почитать

Не знаю как в Д6, а в Д7 описание этого занимает больше половины руководства для разработчика. Документацию можно попытаться найти на сайте борланда или кодегера.


 
Anatoly Podgoretsky ©   (2008-06-12 13:17) [13]

С Дельфи идут примеры, только по Интернет для Д6 10 примеров.


 
palva ©   (2008-06-12 13:42) [14]

Заглянул на страничку и ее html-код. Там просто вызов скрипта, лежащего на сервере. Так что саму страничку сканировать особого смысла нет, данных там не найдете. Нужно загрузить URL в TWebBrowser, браузер сгрузит и выполнит необходимые скрипты. После чего можно будет разбирать страничку через документный объект. Но и здесь могут быть подводные камни, если авторы сайта приложили усилия, чтобы затруднить скачивание информации программой.


 
slavikdr ©   (2008-06-15 08:52) [15]


> После чего можно будет разбирать страничку через документный
> объект


А можно здесь поподробней - что за документный объект такой?



Страницы: 1 вся ветка

Текущий архив: 2008.07.13;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
2-1213628343
Viktor198
2008-06-16 18:59
2008.07.13
Как привязаь компонент ProgressBar


15-1211874362
версия для печати
2008-05-27 11:46
2008.07.13
Замена множества компонент в проекте


2-1213251527
Yury
2008-06-12 10:18
2008.07.13
очистка каталога


3-1202068859
Slim
2008-02-03 23:00
2008.07.13
Как установить фокус в DbGridEh на нужный столбец?


2-1213621632
snake-as
2008-06-16 17:07
2008.07.13
Простая хэш - функция