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

@sztilq: widziałem to kiedyś. Bardzo fajne do przetwarzania. Tylko czy da radę tym ściągnąć całą stronę (z obrazkami, CSS itd)?

Bo tu jest przykład: http://jsoup.org/cookbook/input/load-document-from-url
Ale wątpię, że w tym obiekcie Document jest wszystko (już ściągnięte i pozmieniana treść np. zmiana linków do grafik itd). No i czy da się to potem wyświetlić użytkownikowi (bo sam HTML to tak, ale z resztą strony)?
  • Odpowiedz
@mk321: Próbujesz rozwiązać kilka problemów na raz. Pobieranie zasobów to jedno. Parsowanie zasobów to drugie (css i js może być ładowany nie tylko przez html, ale też przez samego siebie). Sposób przechowywania. Przetwarzanie. Spróbuj to podzielić sobie właśnie na mniejsze problemy.

Nie jestem ślepo zapatrzony w NoSQL, ale przechowywanie plików w bazie SQL nie ma żadnego sensu i uzasadnienia. Jeżeli będziesz miał to na dysku, w GridFS czy czymkolwiek innym
  • Odpowiedz