powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Web Crawler
25 сообщений из 34, страница 1 из 2
Web Crawler
    #34307055
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Помогите решить проблемку:

Задача - написать своего рода многопоточный серверный crawler или парсер с веб интерфейсом и высокой производительностью. Т.е. пользователь добавляет некие данные через веб интерфейс а система начинает лазить по сети и искать нужную информацию попутно занося результаты в БД.
Проблемы - я новичек в ява и никогда не занимался разработкой такого софта :-)
т.ч. подскажите где и что, пожалуйста.

Система должна состаять из некого сервиса\даемона,веб интерфейса,и базы данных.
В даемоне посути крутится цикл который проверяет поступили ли новые данные для обработки, если да то смотрит не достигнуто ли придельное кол-во потоков если всё ок создает новый поток если нет уходит опять в спячку... Я правильно размышляю? Дальше поток конектится к хосту качает инфу парсит и резалты возвращает даемону. Даемон заносит всё в БД.

1)На базе чего лучше реализовать коннект по http? Что бы быстро и отказоустойчиво. Библиотеки? Jakarta?
2)Есть ли готовые библиотеки для контроля потоков? Когда их один-два всё просто а когда 1000?
3)Быстрая бд?
4)Как реализовать daemon\сервис? Разработка и первоначальное преминение будет на винде, а потом перенесено на linux...
5)Как реализовывать веб интерфейс, на базе каких технологий? Как передавать данные от интерфейса к даемону - заносить в бд?


Заранее спасибо за ответы, извиняюсь если где-то глупость сморозил. =)
...
Рейтинг: 0 / 0
Web Crawler
    #34307085
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оповещать демона имхо логично через JMS. интерфейс - обычные сервлеты под Tomcat. в качестве БД берите Mysql - хватит вполне.

демон будет представлять обычное Java приложение. При запуске встает в очередь слушателей JMS. Также демон должен хранить пул crawl-еров.

сервлет при очередной порции данных для парсинга отправляет в очередь сообщение.

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

crawl-ер парсит страницы и обновляет БД.
...
Рейтинг: 0 / 0
Web Crawler
    #34307437
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас пытаюсь разобраться c JMS, а вот на счет mysql сомнения гложат, не уверен я в его производительности мягко говоря... Может ошибаюсь?
...
Рейтинг: 0 / 0
Web Crawler
    #34307461
Фотография raidan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadowSmileСейчас пытаюсь разобраться c JMS, а вот на счет mysql сомнения гложат, не уверен я в его производительности мягко говоря... Может ошибаюсь?
А вы что именно будете сохранять своим crawler'ом? Все страницы целиком? Или специальным образом проиндексированные данные? Или хотите переложить текстовую индексацию на плечи СУБД?
...
Рейтинг: 0 / 0
Web Crawler
    #34307472
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
raidan
А вы что именно будете сохранять своим crawler'ом? Все страницы целиком? Или специальным образом проиндексированные данные? Или хотите переложить текстовую индексацию на плечи СУБД?
Нет не страницы целиком, а отфильтрованную информацию например все ссылки на странице.
...
Рейтинг: 0 / 0
Web Crawler
    #34307495
Фотография raidan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadowSmile
Нет не страницы целиком, а отфильтрованную информацию например все ссылки на странице.
Попробуйте рассчитать средний объем страницы, скорость вашего интернет-соединения, среднее количество ссылок на странице и сопоставить всё это со скоростью, которую обеспечивает MySQL при выполнении нужным вам действий одновременно (т.е. несколько вставок или несколько вставок и несколько выборок одновременно) — таким образом вы можете примерно представить, что является тормозящим фактором — либо MySQL (не позволяет так быстро вставлять в него отфильтрованную информацию), либо crawler'ы, которые не могут загрузить работой СУБД.
...
Рейтинг: 0 / 0
Web Crawler
    #34307715
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А какие еще есть варианты кроме JMS?

raidan
Спасибо, попробую.
...
Рейтинг: 0 / 0
Web Crawler
    #34341918
NadinaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кроме JMS можно использовать сокеты. Есть клиентская прога и демон, демон находится в режиме ожидания, объект класса ServerSocket в этом поможет, клиент посылает сокет, содержащий запрос, демон запускает crawl для этого запроса в отдельном потоке.
...
Рейтинг: 0 / 0
Web Crawler
    #34345232
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле быстро делать нельзя.
После каждого запроса к вебсайту надо делать интервал секунд 5. По 2м причинам:
1) перегружаете сайт
2) на приличных сайтах ето будет обнаружено и Вам отрубят доступ.

Так что mysql должен справится.
Проще правда все было бы на скриптах заделать..
...
Рейтинг: 0 / 0
Web Crawler
    #34347171
Better
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A. Fig Lee: На самом деле 5 секунд не помогут, если с той стороны есть DoS guardian.

Автору: Вполне возможно Вам прийдется столкнуться еще с одной проблемой, которая тут нигде не упомянута - с зацикливанием crawler'а - и тупое сохранение всех пройденных урлов еще не решает проблему.
...
Рейтинг: 0 / 0
Web Crawler
    #34347994
Фотография stdio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BetterA. Fig Lee: На самом деле 5 секунд не помогут, если с той стороны есть DoS guardian.

Автору: Вполне возможно Вам прийдется столкнуться еще с одной проблемой, которая тут нигде не упомянута - с зацикливанием crawler'а - и тупое сохранение всех пройденных урлов еще не решает проблему.да, один симлинк много крови может попортить :-)
...
Рейтинг: 0 / 0
Web Crawler
    #34348213
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BetterA. Fig Lee: На самом деле 5 секунд не помогут, если с той стороны есть DoS guardian.

Автору: Вполне возможно Вам прийдется столкнуться еще с одной проблемой, которая тут нигде не упомянута - с зацикливанием crawler'а - и тупое сохранение всех пройденных урлов еще не решает проблему.

Почему не поможет? 5 сек - ето не денайал оф сервис.
...
Рейтинг: 0 / 0
Web Crawler
    #34351990
Better
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 stdio:
Было такое: педжинейшн на сайте был криво реализован - уводил в бесконечность - ну или по крайней мере до Integer.MAX_VALUE урлов.. :)

2 A. Fig Lee:
Потому что 1 запрос в пять секунд на протяжении достаточно долгого времени может быть расценен как нарушение netiquette'а. Кому-то пофиг, у кого-то с этим жестко. Проверено.
Кроме того Вы много не на crawl ите делая паузу между запросами 5 секунд - конечно, зависит от задачи.
...
Рейтинг: 0 / 0
Web Crawler
    #34352033
Фотография andrushok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShadowSmileСейчас пытаюсь разобраться c JMS, а вот на счет mysql сомнения гложат, не уверен я в его производительности мягко говоря... Может ошибаюсь?
Правильно гложат. Рассмотрите PostgreSQL. Она лучше для вашей задачки.
...
Рейтинг: 0 / 0
Web Crawler
    #34352059
raidforweb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrushok ShadowSmileСейчас пытаюсь разобраться c JMS, а вот на счет mysql сомнения гложат, не уверен я в его производительности мягко говоря... Может ошибаюсь?
Правильно гложат. Рассмотрите PostgreSQL. Она лучше для вашей задачки.
А аргументировать? В плане производительности для данной задачи.
...
Рейтинг: 0 / 0
Web Crawler
    #34352616
ArmenA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это подарок .
...
Рейтинг: 0 / 0
Web Crawler
    #34352617
ArmenA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gift
...
Рейтинг: 0 / 0
Web Crawler
    #34353543
maddcast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Никак в толк не возьму, почему бы не использовать nutch?
...
Рейтинг: 0 / 0
Web Crawler
    #34355927
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Better2 stdio:
Было такое: педжинейшн на сайте был криво реализован - уводил в бесконечность - ну или по крайней мере до Integer.MAX_VALUE урлов.. :)

2 A. Fig Lee:
Потому что 1 запрос в пять секунд на протяжении достаточно долгого времени может быть расценен как нарушение netiquette'а. Кому-то пофиг, у кого-то с этим жестко. Проверено.
Кроме того Вы много не на crawl ите делая паузу между запросами 5 секунд - конечно, зависит от задачи.

Ето только на мелких, мало популярных сайтах может быть.
Иначе слишком много инфо для анализа надо держать. Держать всю инфо за 5 сек по запросам на яху например - захлебнутся в инфо можно.
Не производительно.
...
Рейтинг: 0 / 0
Web Crawler
    #34362006
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На счет dos я думаю в моём случае это не актуально т.к. краулер довольно грамотно стучится на сайты и в итоге получается максимум 2-3 запроса на сайт, что не особо на атаку смахивает =) У меня просто ситуация несколько иная много сайтов и соответственно потоков, а контента с них тянуть на пару запросов.
Пока стоит mysql после серии тестов уже будет понятно справляется она или нет.
Пока реализовал сам краулер и его внутренние алгоритмы, работу с бд и внешним интерфейсом вынес в отдельные класы так что при необходимости лекго перепишу. Управление думаю реализовать в итоге через php и сокеты... хотя еще до конца не ясно. Больно уж не хочется мне заморачиваться с j2ee, я с этими технологиями незнаком, а учить там до чертиков.

ArmenAА это подарок .
Спасибо за подарок, парочку методов уже прихватил =)
...
Рейтинг: 0 / 0
Web Crawler
    #34363884
Better
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A. Fig Lee Better2 stdio:
Было такое: педжинейшн на сайте был криво реализован - уводил в бесконечность - ну или по крайней мере до Integer.MAX_VALUE урлов.. :)

2 A. Fig Lee:
Потому что 1 запрос в пять секунд на протяжении достаточно долгого времени может быть расценен как нарушение netiquette'а. Кому-то пофиг, у кого-то с этим жестко. Проверено.
Кроме того Вы много не на crawl ите делая паузу между запросами 5 секунд - конечно, зависит от задачи.

Ето только на мелких, мало популярных сайтах может быть.
Иначе слишком много инфо для анализа надо держать. Держать всю инфо за 5 сек по запросам на яху например - захлебнутся в инфо можно.
Не производительно.

Вы это с такой уверенностью говорите, что я даже начинаю верить в эту чушь! Google, видимо, как раз один из таких мелких, мало популярных сайтов ? См. аттач.
...
Рейтинг: 0 / 0
Web Crawler
    #34364636
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Better A. Fig Lee Better2 stdio:
Было такое: педжинейшн на сайте был криво реализован - уводил в бесконечность - ну или по крайней мере до Integer.MAX_VALUE урлов.. :)

2 A. Fig Lee:
Потому что 1 запрос в пять секунд на протяжении достаточно долгого времени может быть расценен как нарушение netiquette'а. Кому-то пофиг, у кого-то с этим жестко. Проверено.
Кроме того Вы много не на crawl ите делая паузу между запросами 5 секунд - конечно, зависит от задачи.

Ето только на мелких, мало популярных сайтах может быть.
Иначе слишком много инфо для анализа надо держать. Держать всю инфо за 5 сек по запросам на яху например - захлебнутся в инфо можно.
Не производительно.

Вы это с такой уверенностью говорите, что я даже начинаю верить в эту чушь! Google, видимо, как раз один из таких мелких, мало популярных сайтов ? См. аттач.

Ну смотрю. Какой интервал был?
...
Рейтинг: 0 / 0
Web Crawler
    #34376183
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, возник еще вопросик: мне нужно ограничивать размер страницы например до 100кб, но если я это делаю появляются дикие тормоза из-за переконвертации возможно ли как-нибуть решить эту проблему? Тормозящий код закоментирован.

Заранее спасибо.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
    private  String getSiteBody(URL url)
    {


        String res = "";
      
        HttpClient client =  new  HttpClient();
        client.getHostConfiguration().setHost(url.getHost(), url.getPort(), url.getProtocol());       
        client.getParams().setParameter("http.useragent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1) Gecko/20061003 Firefox/2.0");
        GetMethod get =  new  GetMethod(url.getPath());
        get.setQueryString(url.getQuery());
        client.getHttpConnectionManager().getParams().setConnectionTimeout( 20000 );

         try 
        {

             if  (client.executeMethod(get) ==  200 )
            {

                BufferedReader in =  new  BufferedReader( new  InputStreamReader(get.getResponseBodyAsStream()));

                String line = in.readLine();
                StringBuilder sb =  new  StringBuilder();

                 while  (line !=  null )
                {
                    sb.append(line);
                    sb.append("\n");

               /*     if (sb.toString().getBytes() > 100000)
                    {
                        System.out.println("Break coz of size limit:"+url);
                        return "";
                    }*/
                    line = in.readLine();
                }
                res = sb.toString();
              
            }

        }  catch  (IOException e)
        {
            e.printStackTrace();
        }  finally 
        {

            get.releaseConnection();
        }

         return  res;
    }

...
Рейтинг: 0 / 0
Web Crawler
    #34378351
A. Fig Lee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
StringBuilder sb =  new  StringBuilder();
                 int  ln_size = line.length();
                 while  (line !=  null  && ln_size <  100000 )
                {
                    sb.append(line);
                    sb.append("\n");

                    line = in.readLine();
                    ln_size += line.length();
                }
                res = sb.toString();
...
Рейтинг: 0 / 0
Web Crawler
    #34378726
ShadowSmile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
A. Fig Lee Спасибо, что-то я стормозил =)


Еще вопросик =)

Подвисают потоки, в самом конце из 100 остаётся ~25-30 потоков которые явно не стучатся в сеть... Я предпологаю что может подвисает стрим где-то в середине сайта, а httpclient ждет бесконечно данных... Может такое быть? или я не там ищу... Есть идеи как с этим бороться и вычислять пробему?
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Web Crawler
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]