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.
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).
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?
@mk321 są biblioteki - pisałem kiedyś crawlera w Javie i masakra z tego wyszła. A w pythonie prosty crawler już w kilkunastu linijkach kodu zamkniesz (używając choćby scrapy)
@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
@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.
@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?
@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 ;(
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).
Użyj pythona - znacznie mniej się upiszesz.
A jak w Pythonie? Też ręcznie czy są jakieś biblioteki (i łatwo z nich skorzystać? są przykłady?).
@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?
są biblioteki - pisałem kiedyś crawlera w Javie i masakra z tego wyszła. A w pythonie prosty crawler już w kilkunastu linijkach kodu zamkniesz (używając choćby scrapy)
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).
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
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
Komentarz usunięty przez autora