Wpis z mikrobloga

#programowanie #java #spring #webdev

Chcę napisać aplikację, która: będzie pobierać stronę internetową (z obrazkami, CSS itd), zapisywać ją do bazy, odczytywać, wyświetlać stronę w przeglądarce.

Oczywiście prosto w Javie nie mogę tego zrobić (za pomocą HttpURLConnection, setRequestMethod("GET"), InputStreamReader) bo mam sam kod HTML (bez obrazków itd). Musiałbym ręcznie ściągać wszystkie linki, potem podmieniać w kodzie linki do nich itd.

Podobno można skorzystać z webcrawlera (ma ktoś inny pomysł?): http://java-source.net/open-source/crawlers

Ten jest profesjonalny, ale trudny (więc odpada): https://webarchive.jira.com/wiki/display/Heritrix/Heritrix

Ten jest chyba łatwiejszy: https://github.com/yasserg/crawler4j

Pod końcem jest nawet przykład ściągnięcia strony (ten kod z setCrawlStorageFolder). Tylko to mi zapisuje wszystkie pliki do folderu. Jak zrobić, żeby zapisywało to do bazy? W dokumentacji nic nie znalazłem ;/

Ręcznie zapisywać po pobraniu wszystkie pliki z folderu do bazy? A jak będę chciał wyświetlić tą stronę to znowu z bazy do tymczasowego folderu na dysku?
To chyba jest bardzo niewydajne. Nie da się tego zrobić jakoś na strumieniach (bez zapisywania na dysk)? Jakoś nadpisać tą metodę setCrawlStorageFolder (bo nie znalazłem nic w stylu setCrawlStorageDatabase).
  • 24
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@franciss: nie mogę. Mam już kawałek aplikacji w Javie w Springu i muszę w tym pisać.

A jak w Pythonie? Też ręcznie czy są jakieś biblioteki (i łatwo z nich skorzystać? są przykłady?).
  • Odpowiedz
zapisywać ją do bazy, odczytywać, wyświetlać stronę w przeglądarce.


@mk321: Po co chcesz je trzymać w bazie ,aby wyświetlić potem w przeglądarce?
Nie lepiej trzymać je jako statyczne pliki na dysku a w bazie tylko identyfikatory które będziesz nadawał zapisując pliki?
  • Odpowiedz
@Bozyszcze: piszę aplikację do archiwizacji stron. Jakby to był jeden plik ze stroną, to tak (a jedna strona to kilkadziesiąt plików). Przy ich dużej ilości nie wyobrażam sobie przenoszenie milionów malutkich plików.

Po za tym muszę mieć to w bazie (bo chcę to móc potem przetwarzać). Odczytywanie z dysku będzie niewydajne.

@blue94: po prostu muszę w Javie i już (inżynierka, już wcześniej wybrałem).
  • Odpowiedz
@mk321: nie napisałeś w zasadzie po co to robisz :) Także odpowiedziałem na podstawie wiedzy jaką miałem :)
Jeśli nie spodziewasz się nie wiadomo jakiego ruchu to może i w bazie będzie lepiej. Ja założyłem ,że pliki statyczne zawsze lepiej się keszują i jeśli masz zamiar tylko je wyświetlać to lepsze będą statyki.

Piszesz ,że chcesz je przetwarzać. Przetwarzać jednokrotnie czy wiele razy? Może się okazać ,że po przetworzeniu lepiej
  • Odpowiedz
@Bozyszcze: o z tym keszowaniem to nie pomyślałem, że z dysku szybciej się odczyta. Tylko, że przy ich dużej ilości wdaje mi się, że strasznie niewygodne.
Ogólnie to ma być coś w stylu: https://archive.org/web/ (oni korzystają z Heritrixa, ale ja go nie potrafię ogarnąć, w dodatku termin mnie goni).

O NoSQL dopiero zaczynam się interesować. Nie wszystko na raz. Na razie sobie z Hibernate skorzystam.

Nie umiem tylko skorzystać z
  • Odpowiedz
@mk321: Czy jesteś świadomy, że NoSQL a Hibernate to są zupełnie inne bajki? NoSQL to "typ" bazy danych a Hibernate to framework realizujący dostęp do bazy danych?
  • Odpowiedz
@MozeSuker: dzięki. To tym bardziej, później sobie może kiedyś podmienię w Hibernate "zwykłą" bazę na NoSQL (np. mongoDB). Ale na razie wolałbym w ogóle mieć to tam trzymać, bo na razie nie mam nic ;(
  • Odpowiedz