Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.07.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.008 c
2-1213435120
Kaer
2008-06-14 13:18
2008.07.13
Как избавиться от "Out of memory"?


2-1213609411
Степан
2008-06-16 13:43
2008.07.13
Программно поместить TWebBrowser


2-1213024171
Franzy
2008-06-09 19:09
2008.07.13
Как узнать статус завершения запущенной консольной программы?


15-1211734954
Дмитрий С
2008-05-25 21:02
2008.07.13
Облегчить реализацию IDispach


15-1211126613
Kolan
2008-05-18 20:03
2008.07.13
Где найти полное описание протокола для клиентов форума?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский