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
@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?).
@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).
@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 zrzucić
@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 tych
@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 ;(