Wyciąganie danych ze strony podczas startu aplikacji i zapisywanie ich od razu do bazy.

0

Cześć,

Chciałbym sobie wyciągnąć dane top 10 zawodników podzielonych na wszystkie kategorie ze strony rankingmma.com/ufc-rankings/
Problem jaki mi się pojawia to jak zapisać takie atrybuty do obiektu, a następnie je w bazie aby później sobie na nich operować. Ale większy problem jaki mam to jak to zrobić skoro są osobne linki do wszystkiego np:
** UFC Heavyweight Rankings (265 lbs.)**

Jak w to wchodząc ma się zapisać poprzez kolejne odnośniki? htmlunit czy jsoup będzie wartym zagadnienia tematem ponieważ chcę w to wejść na świeżo.

Jakieś porady? :D

1

Kiedyś korzystałem z JSoupa do jakiegoś prostego pobierania i parsowania danych ze stronek. Z tego co pamiętam, JSoup nie operuje na strumieniach, tylko od razu wczytuje całą zawartość, ale w przypadku stron internetowych, to nie powinien być problem. Jego jQuery'owe selectory bardzo ułatwiały pracę z drzewem DOM i do takich zadań używało mi się go naprawdę wygodnie.

Ale większy problem jaki mam to jak to zrobić skoro są osobne linki do wszystkiego np:
UFC Heavyweight Rankings (265 lbs.)

Na Twoim miejscu, podzieliłbym to w ten sposób:

  • Zadanie per kategoria - jakiś worker, który parsuje poszczególny rodzaj rankingu (jeśli sposób parsowania podobny, to może być to jedna implementacja tylko zmienia się kategoria parsowanego rankingu, a wraz z nią URL).
  • Zadanie pobierające z głównego linka i generujące podzadania parsowania per kategoria (mogłoby np. wrzucać na jakąś kolejkę parametry do parsowania - URL, typ rankingu - a tamte podzadania uruchamiane byłyby z wykorzystaniem listenera nasłuchującego na tej kolejce)

Ja bym osobiście tam dodał jakąś wielowątkowość (np. pulę 4 wątków) z ExecutorService i CompletableFuture lub robił to z wykorzystaniem RxJava / ProjectReactor, ale w Twoim przypadku, to tylko po to, żeby się pobawić tymi frameworkami, bo zadania parsowania będą trwać dość krótko i jest ich bardzo mało.

Odnośnie modelu danych - na razie zastanów się, jak wygodnie będzie Ci te dane zapisywać w postaci POJO - ranking, zawodnik, jakie są między nimi relacje, czy ranking ma jakąś datę pobrania, czy wersjonujesz rankingi itd.

Jak już ogarniesz samo parsowanie do obiektów Java, to potem zajmij się warstwą persystencij. Wg mnie, nie ma co sobie głowy tym zaprzątać, na ten moment. ;)

0

Wygląda ten plan na stworzenie mojego pomysłu na bardzo tłusto : D dzięki za odpowiedź.

Pytanie jeszcze takie z drugiej strony - chciałem to mieć po prostu do CV ( samemu zrobić coś takiego też fajna sprawa :P ) tylko teraz się zastanawiam czy takie rzeczy robi się w pracy i czy rzeczywiście jest sens się teraz nad tym męczyć i tej wiedzy nigdy nie użyć / do CV takich rzeczy nie potrzeba.

0

Hmm... Wszystko zależy od tego, na jakim poziomie szukasz pracy. Gdybym szukał kogoś doświadczonego (mid/senior), to bym pewnie zerknął i tylko zwrócił uwagę, czy nie ma jakichś głupot, i jeśli kod byłby rzeczywiście ładny, to pewnie i tak byłby to mały plus.

Generalnie, jeśli kod będzie schludny, zastosujesz się do SOLIDa, Prawo Demeter (loose coupling), może jakieś wzorce projektowe i do tego fajnie napiszesz testy, to zawsze na plus.

Jeśli nie czujesz się zbyt pewnie od razu wrzucając do projektu wielowątkowość, możesz wszystko najpierw zrobić synchronicznie, a później dodać wielowątkowość.
Napierw robisz synchroniczną apkę. Potem robisz forka i tam dodajesz wielowątkowość. Wtedy będzie też widać, że się rozwijasz.
Kolejnym krokiem może być dodanie benchmarków JMH, porównanie rozwiązań i być może jakiś tuning aplikacji wielowątkowej, żeby działała jeszcze wydajniej? :)

0

Jeszcze do pracy się nie pcham bo wiem czego nie wiem - jestem na etapie enpointów do toDoListy ( relacje miedzy encjami, prosty sql ) + testy jednostkowe; z tego co słyszałem to jest to 'trochę' więcej niż u wszystkich w Warszawie :D dlatego zastanawiam się czym mogę być ponad tymi wszystkimi i na pierwszy rzut oka taki projekt może być tym czymś, tylko zastanawiam się czy mnie to nie przerośnie. Robię to po godzinach bo kiedyś z obecnej pracy chcę zmienić na programistę ponieważ mnie to mega kręci pytanie tylko czy nie rzuciłem sobie z dużego wyzwania z tym jsoupem itp. Z drugiej zaś strony skoro mi się nigdzie nie śpieszy to na co czekać? :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1