Java одновременная рекурсивная загрузка сайта - PullRequest
0 голосов
/ 19 марта 2009

Мне нужна программа для загрузки веб-страниц, то есть я даю веб-страницу программному обеспечению, и она будет загружать все файлы на сайте.

Я бы также прошел уровень глубины, то есть уровень, на котором программа загружает каждый файл веб-сайта.

Я буду разрабатывать это программное обеспечение на Java, и мне нужно также использовать параллелизм.

Пожалуйста, скажите мне свое мнение о том, как это сделать.

Спасибо за помощь.


Спасибо всем за помощь.

Мне нужно спросить еще одну вещь. Как мне сделать, чтобы загрузить файл с сайта?

Так еще раз. = D

Ответы [ 4 ]

2 голосов
/ 19 марта 2009

Очень полезная библиотека для пауков и ботов: htmlunit

0 голосов
0 голосов
/ 19 марта 2009

Я бы посмотрел на Java Executors пакет. Вы создаете набор задач ( Runnable s) и передаете их подходящему выбранному исполнителю. Вы получаете Future назад и можете запросить его результат.

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

Apache HTTP Client позаботится о том, чтобы HTTP-запрос выполнялся за вас.

0 голосов
/ 19 марта 2009

Ну, на это немного сложно ответить, не зная, насколько подробное руководство вам нужно, но вот обзор. :)

Java делает такие приложения довольно простыми, поскольку и HTTP-запросы, и многопоточность легко доступны. Мое решение, вероятно, будет включать глобальный стек, содержащий новые URL-адреса, и ферму с постоянным количеством потоков, которые извлекают URL-адреса из стека. Я бы сохранял URL-адреса как пользовательский объект, чтобы я мог отслеживать глубину.

Я думаю, что ваша главная проблема здесь будет с сайтами, которые не отвечают или не следуют стандарту HTTP. Я много раз замечал в похожих приложениях, что иногда они не работают должным образом, и в итоге они блокируют все потоки. К сожалению, у меня нет хороших решений здесь.

Несколько полезных классов в качестве отправной точки:
http://java.sun.com/javase/6/docs/api/java/lang/Thread.html
http://java.sun.com/javase/6/docs/api/java/lang/ThreadGroup.html
http://java.sun.com/javase/6/docs/api/java/net/URL.html
http://java.sun.com/javase/6/docs/api/java/net/HttpURLConnection.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...