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

Вниз

Как сохранить закачанные 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;
Скачать: [xml.tar.bz2];

Наверх





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


15-1364463473
boriskb
2013-03-28 13:37
2013.09.01
Россиянин победил в международном конкурсе программистов Facebook


2-1356079437
Женя
2012-12-21 12:43
2013.09.01
Квадратное уравнение


2-1356156835
alexdn
2012-12-22 10:13
2013.09.01
DBGrid


2-1356016429
Pcrepair
2012-12-20 19:13
2013.09.01
Как сохранить закачанные HTML-страницы?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский