Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Пример приложения для сканирования сайта / 25 сообщений из 28, страница 1 из 2
02.05.2018, 07:32
    #39638866
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Привет!

На выходных делал приложение командной строки для сканирования сайта angel.co.

Используемые технологии: java8, phantomjs, selenium, jsoup, apache cvs, apache poi.

Может будет кому интересно.

https://github.com/javadev/scan-angel-co

С уважением, Валентин
...
Рейтинг: 0 / 0
02.05.2018, 13:29
    #39638973
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Valentin KolesnikovПривет!

На выходных делал приложение командной строки для сканирования сайта angel.co.

Используемые технологии: java8, phantomjs, selenium, jsoup, apache cvs, apache poi.

Может будет кому интересно.

https://github.com/javadev/scan-angel-co

С уважением, Валентин


Спасибо .


зы

а вы все проекты одним файлом кода оформляете ?
...
Рейтинг: 0 / 0
02.05.2018, 14:10
    #39638988
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Atum1Valentin KolesnikovПривет!

На выходных делал приложение командной строки для сканирования сайта angel.co.

Используемые технологии: java8, phantomjs, selenium, jsoup, apache cvs, apache poi.

Может будет кому интересно.

https://github.com/javadev/scan-angel-co

С уважением, Валентин


Спасибо .


зы

а вы все проекты одним файлом кода оформляете ?

Пожалуйста.

С уважением, Валентин
...
Рейтинг: 0 / 0
02.05.2018, 15:31
    #39639010
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Вот за такой ад и не любят java. Ну хоть стримы впилили и то гуд.
Кстати, не понимаю семантику этого метода, но возможно тут баг

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
private static List<List<Map<String, String>>> removeDuplicates(List<List<Map<String, String>>> listOfUrlData) {
        List<List<Map<String, String>>> result = new ArrayList<>();
        Map<String, Map<String, String>> urlToItem = new LinkedHashMap<>();
        for (List<Map<String, String>> list : listOfUrlData) {
            List<Map<String, String>> newList = new ArrayList<>();
            for (Map<String, String> item : list) {
                if (urlToItem.containsKey(item.get("url"))) {
                    continue;
                }
                urlToItem.put(item.get("url"), item);
                newList.add(item);
            }
            result.add(newList);
        }
        return result;
    }
...
Рейтинг: 0 / 0
02.05.2018, 18:42
    #39639064
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
забыл ник,

Тут выполняется удаление дубликатов.

С уважением, Валентин
...
Рейтинг: 0 / 0
02.05.2018, 20:26
    #39639083
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Может я чего-то недопонял, но не проще ли было пробегать список от текущего и до конца и удалять дубликаты?
...
Рейтинг: 0 / 0
02.05.2018, 20:41
    #39639084
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
HettМожет я чего-то недопонял, но не проще ли было пробегать список от текущего и до конца и удалять дубликаты?

Вас только удаление дубликатов заинтересовало. Ну ок.

С уважением, Валентин
...
Рейтинг: 0 / 0
02.05.2018, 22:13
    #39639097
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Valentin Kolesnikovзабыл ник,

Тут выполняется удаление дубликатов.

С уважением, Валентин

Дубликатов чего? У вас настолько вложенная структура данных что я без пол-литра и не разберу..

Код: java
1.
List<List<Map<String, String>>>



Если вы хотите вывести список уникальных ссылок с каждой страницы, то ваш кусок логики -

Код: java
1.
2.
3.
if (urlToItem.containsKey(item.get("url"))) {
                    continue;
                }



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

А в данной имплементации у вас получается находятся все уникальные ссылки на первой странице, на второй только те что не на первой странице, на третьей -... чтопо мне нелогично, поэтому я и написал что семантика мне непонятна.

Если же я прав(в чем тоже есть сомнения ибо код очевидно хитрый и может так оно и надо) - то ваш код можно сильно упрощать.

В любом случае он адовый конечно..
...
Рейтинг: 0 / 0
02.05.2018, 22:14
    #39639098
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
метод адовый, не весь код конечно:)
...
Рейтинг: 0 / 0
03.05.2018, 03:02
    #39639132
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
забыл ник,

Нужно было получить уникальные записи для всех страниц а не внутри одной страницы.

С уважением, Валентин
...
Рейтинг: 0 / 0
03.05.2018, 07:49
    #39639153
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
забыл никВот за такой ад и не любят java. Ну хоть стримы впилили и то гуд.
Кстати, не понимаю семантику этого метода, но возможно тут баг

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
private static List<List<Map<String, String>>> removeDuplicates(List<List<Map<String, String>>> listOfUrlData) {
        List<List<Map<String, String>>> result = new ArrayList<>();
        Map<String, Map<String, String>> urlToItem = new LinkedHashMap<>();
        for (List<Map<String, String>> list : listOfUrlData) {
            List<Map<String, String>> newList = new ArrayList<>();
            for (Map<String, String> item : list) {
                if (urlToItem.containsKey(item.get("url"))) {
                    continue;
                }
                urlToItem.put(item.get("url"), item);
                newList.add(item);
            }
            result.add(newList);
        }
        return result;
    }


Да. Я думаю что у нас такой код не прошел-бы code-review. Основной поинт - вложенность дженериков.
Их не должно быть так много. Говоря простым языком на каждом уровне вложенности программист
должен понимать "имя" той сущности с которой он работает. Если имя этой сущности
"список-списков-мап-с-ключом-строка"... e.t.c. то разговаривать о таком коде становится
не просто сложно а немыслимо. Как вариант можно разбить эту цепочку дженериков
на вспомогательные классы, которые отражают суть решаемой проблемы.

Кстати сравнительно недавно в смежном топике мы обсуждали NASA-вский документ
рекомендаций по стилю кодирования и там что-то было про ограничение на количество
разыменований в С.
...
Рейтинг: 0 / 0
03.05.2018, 08:37
    #39639164
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
mayton,

Хорошо, я переделаю. Добавлю типизированных классов и создам pull request. Сможете его проверить?

С уважением, Валентин
...
Рейтинг: 0 / 0
03.05.2018, 11:32
    #39639258
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
https://github.com/javadev/scan-angel-co/pull/1

Так должно быть лучше.

С уважением, Валентин
...
Рейтинг: 0 / 0
03.05.2018, 11:38
    #39639260
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Я сейчас со смартфона. Неудобно читать исходники.

Я посмотрю вечером ваш чендж. Но если sql. Ru сообщество тоже
Посмотрит то и я буду не против. В конце концов у меня не больше привилегий
В вашем проекте чем у случайного прохожего.
...
Рейтинг: 0 / 0
03.05.2018, 11:55
    #39639273
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Безусловно так гораздо лучше, но мне все равно непонятно почему вы упорно сопротивляетесь алгоритму "в лоб" -

1) сначала схлопываем лист листов в лист(через flatMap)
2) переопределяем equals у DataItem, чтобы сранивались по url
3) переводим list в set, так все дубликаты уйдут
4) переводим set в мап

Никаких foreach, никаких мутабельных структур и тд

ну и
Код: java
1.
2.
3.
4.
5.
          for (CvsItem item : urlToLinkedin) {
          if (item.url.equals(url)) {
               return item.email;
             }
         }



по-моему проще выглядит как

Код: java
1.
urlToLinkedin.filter(...)



Не подумайте что придираюсь, сам функционал хороший, может когда и пригодится. Надо какраз сайт один скачать
...
Рейтинг: 0 / 0
03.05.2018, 12:45
    #39639334
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Нельзя схлопывать. На вход идет дерево. На выходе по протоколу тоже дерево.
Возможно автору нужен итератор по урлам но это другая постановка.
...
Рейтинг: 0 / 0
03.05.2018, 14:38
    #39639449
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
maytonНельзя схлопывать. На вход идет дерево. На выходе по протоколу тоже дерево.
Возможно автору нужен итератор по урлам но это другая постановка.

Если задача такая, то можно
авторзабыл ник,

Нужно было получить уникальные записи для всех страниц а не внутри одной страницы.

С уважением, Валентин
...
Рейтинг: 0 / 0
03.05.2018, 14:50
    #39639459
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
забыл никmaytonНельзя схлопывать. На вход идет дерево. На выходе по протоколу тоже дерево.
Возможно автору нужен итератор по урлам но это другая постановка.

Если задача такая, то можно
авторзабыл ник,

Нужно было получить уникальные записи для всех страниц а не внутри одной страницы.

С уважением, Валентин


При этом разбивка на группы должна оставаться. Результат сохраняется в нескольких файлах а не одном.

С уважением, Валентин
...
Рейтинг: 0 / 0
03.05.2018, 22:45
    #39639676
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Валентин.

1) Твой рефакторинг полезный. Я-бы закоммитил.

Сейчас в среде разработки я вижу еще старую версию и это осложняет дальнейшие улучшения.
Я-бы не остановился на вложенных списках и еще разбил

2) Я обратил внимание что у тебя нет модульных тестов. Я-бы покрыл. Хотя-бы тривиальными. Чтобы
проверять что рефакторинг не сломал основные утверждения.

3) Вложенные списки мне почему-то напоминают мои эксперименты с XML/XPath
лет 10 назад. Подумай, если тебе надо собирать какие-то сведенья с деревьев
то лучшим DSL является XPath.
...
Рейтинг: 0 / 0
04.05.2018, 09:43
    #39639803
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
maytonВалентин.

1) Твой рефакторинг полезный. Я-бы закоммитил.

Сейчас в среде разработки я вижу еще старую версию и это осложняет дальнейшие улучшения.
Я-бы не остановился на вложенных списках и еще разбил

2) Я обратил внимание что у тебя нет модульных тестов. Я-бы покрыл. Хотя-бы тривиальными. Чтобы
проверять что рефакторинг не сломал основные утверждения.

3) Вложенные списки мне почему-то напоминают мои эксперименты с XML/XPath
лет 10 назад. Подумай, если тебе надо собирать какие-то сведенья с деревьев
то лучшим DSL является XPath.

Спасибо за коментарий. Добавлю юнит тестов к проекту.

С уважением, Валентин
...
Рейтинг: 0 / 0
04.05.2018, 09:53
    #39639817
ORA__SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
ООП, solid, grasp - да ну нафиг. Все в один класс запихнем и на прод
...
Рейтинг: 0 / 0
04.05.2018, 10:15
    #39639842
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
ORA__SQLООП, solid, grasp - да ну нафиг. Все в один класс запихнем и на прод

Там теперь есть встроенные классы и один интерфейс.

С уважением, Валентин
...
Рейтинг: 0 / 0
04.05.2018, 10:17
    #39639845
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
ORA__SQLООП, solid, grasp - да ну нафиг. Все в один класс запихнем и на продкто что умеет.
К парсеру ООП не главное. Увы.
...
Рейтинг: 0 / 0
23.06.2018, 14:22
    #39664618
Valentin Kolesnikov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Еще одно приложение для парсинга сайта.

https://github.com/javadev/scan-google

С уважением, Валентин
...
Рейтинг: 0 / 0
24.06.2018, 11:52
    #39664793
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пример приложения для сканирования сайта
Code review point.

Valentin Kolesnikov, почему в одном интерфейсе вы использовали различные способы доступа
к массивам и коллекциям?

Код: java
1.
2.
3.
4.
5.
6.
private interface HeadersAndValues {

        String[] getHeaders();

        List<String> getValues();
}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Пример приложения для сканирования сайта / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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