Форум: "Начинающим";
Текущий архив: 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.49 MB
Время: 0.007 c