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

Вниз

Как сохранить закачанные HTML-страницы?   Найти похожие ветки 

 
Pcrepair ©   (2012-12-20 19:13) [0]

Добрый день. Есть следующая ситуация:
- загрузчик страниц(на базе TidHTTP и TThread) получает список УРЛ и начинает параллельную закачку страниц
- число закачек ограничено 10 (пока)
- закачка страниц происходит асинхронно, каждая в своем потоке, результат закачки переносится в поле типа property Html: string read FHtml write FHtml;

type
 TLoader = class(TThread)
 private
    FUrl:string;
    FHtml:string;
   { Private declarations }
 protected
   procedure Execute; override;
   function LoadHtmlPage(const Url:string):string;
 public
   property Url: string read FUrl write FUrl;
   property Html: string read FHtml write FHtml;
 end;


- методом CS, на текущий момент, данные передаются в МЕМО, просто для наглядности. и там накапливаются
--------------------------
Необходим накопитель со следующими параметрами:
- доступность из всех процедур. типа глобальная переменная
- два поля: одно для УРЛ, второе для кода HTML-страницы. может и три, третье - для хранения идентификатора, чтоб не было коллизий
- работающее по принципу стека(тогда третье поле не нужно)
- без использования записи на ЖД в файл. все должно хранится в ОЗУ
++++++++++++++++++++++++++++
Внимание! Вопрос:
на основе чего можно сделать такой накопитель:
- что то слепить из операторов и типов(Списки, строки и все такое). никто не знает ссылок на что то похожее?
- использовать компоненты из палитры, там много чего с DB в названии, но с этими компонентами не знаком совершенно, может кто подскажет, какой компонент подойдет для накопителя?
- использовать ИнтерБейс, или еще какую внешнюю БД. что крайне нежелательно, во всяком случае на текущем этапе.


 
Медвежонок Пятачок ©   (2012-12-20 19:19) [1]

идентификаторы - в узлы и атрибуты.
страницы - в узлы CDATA


 
Inovet ©   (2012-12-20 19:22) [2]

Так стек и сделать для хранения типа record "два поля: одно для УРЛ, второе для кода HTML-страницы".


 
Pcrepair ©   (2012-12-20 19:25) [3]

Inovet , то есть мостить что то самопальное из ЗАПИСЬ
а что по поводу компонентов из палитры? никто не не использовал?


 
Медвежонок Пятачок ©   (2012-12-20 19:26) [4]

..... и еще написать кучу кода для поиска нужных рекордов по идентификаторам


 
Inovet ©   (2012-12-20 19:48) [5]

> [4] Медвежонок Пятачок ©   (20.12.12 19:26)
> для поиска нужных рекордов по идентификаторам

Автору это не требуется, как и сами идентификаторы.

> [3] Pcrepair ©   (20.12.12 19:25)
> Inovet , то есть мостить что то самопальное из ЗАПИСЬ

Стек элементарно делается. Массив, индекс вершины, методы push, pop не забывать, как хранятся строки. Если понадобится заранее неизвестная глубина и не захочется лишнюю память с запасом распределять, то ещё перераспределение памяти надо будет сделать. Собственно, это всё.

Из стандартных можно TStringList приспособить.

Или тебе ещё и визуально надо это созерцать?


 
Inovet ©   (2012-12-20 19:52) [6]

> [5] Inovet ©   (20.12.12 19:48)
> это всё

и в деструкторе почистить не забыть.


 
Медвежонок Пятачок ©   (2012-12-20 20:01) [7]

Стек элементарно делается.

К понедельнику может быть даже будет первая бета


 
Pcrepair ©   (2012-12-20 20:06) [8]


> Или тебе ещё и визуально надо это созерцать?

нет визуально не надо, ну только для контроля потом все содержимое переместить в МЕМО, на этапе стенда
а доступность, типа как у глобальной переменной


 
Inovet ©   (2012-12-20 20:14) [9]

> [8] Pcrepair ©   (20.12.12 20:06)
> а доступность, типа как у глобальной переменной

Лучше сделать класс Стек, а его объект хоть в глобальной храни.


 
Pcrepair ©   (2012-12-20 20:53) [10]


> Лучше сделать класс Стек, а его объект хоть в глобальной
> храни.

то есть что то типа
type
  SuperStack = class(TStack)

видимо добавить свои поля
и прописать в модуле как глобальную переменную?


 
Inovet ©   (2012-12-20 21:47) [11]

> [10] Pcrepair ©   (20.12.12 20:53)
> TStack

Шаблон? Пример в хелпе есть.

Только... Судя по другим твоим постам, ты что-то типа поисковика хочешь получить, уж не знаю зачем и какой. Ты уверен, что тебе хватит такой структуры? Первое, что пришло в голову: как на стеке отследишь кольцевые ссылки, то что уже была раньше скачана страница? А такого ещё много всякого и куда сложнее.


 
DVM ©   (2012-12-21 14:13) [12]

Чтоб ему отследить ссылки ему еще как минимум надо решить проблему приведения относительных путей и кривых абсолютных к единому каноническому виду. Та еще задачка.


 
Pcrepair ©   (2012-12-21 17:48) [13]

DVM
да нет, ничего такого не надо

нужно просто сохранить закачанные страницы в паре с УРЛ для последующей обработки(определения рейтинга). сейчас (в однопоточном режиме закачки страниц) они просто идут дальше на обработку, в многопоточном режиме закачки нужно их накопить потом все вместе отправить на определение рейтинга



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

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

Наверх




Память: 0.5 MB
Время: 0.01 c
10-1184751280
NoXXX
2007-07-18 13:34
2013.09.01
Array[0..7] Of Byte в Activex компонент, Как передать?


15-1364292525
Дмитрий С
2013-03-26 14:08
2013.09.01
Как у знать какая дрянь выводит компьютер из сна?


15-1364413348
TUser
2013-03-27 23:42
2013.09.01
Пластиковые окна


15-1364233505
wl
2013-03-25 21:45
2013.09.01
Виброакустическая колонка и вред для винчестеров


2-1355929661
sas9568635
2012-12-19 19:07
2013.09.01
Написать Компилятор языка Дельфи (Паскаль)