Chciałbym móc pobrać kod HTML strony internetowej i zapisać go w pliku String
, aby móc go przetworzyć. Ponadto, jak poradzić sobie z różnymi typami kompresji.
Jak miałbym się do tego zabrać za pomocą Java?
java
http
compression
jjnguy
źródło
źródło
Odpowiedzi:
Oto testowany kod przy użyciu klasy URL języka Java . Zalecałbym jednak lepszą pracę niż tutaj, jeśli chodzi o obsługę wyjątków lub przekazywanie ich w górę stosu wywołań.
źródło
DataInputStream
naBufferedReader
. I zamień"dis = new DataInputStream(new BufferedInputStream(is));"
na"dis = new BufferedReader(new InputStreamReader(is));"
InputStreamReader
?Użyłbym przyzwoitego parsera HTML, takiego jak Jsoup . To jest tak proste, jak:
Obsługuje GZIP i odpowiedzi podzielone na fragmenty oraz kodowanie znaków w pełni transparentnie. Oferuje również więcej korzyści, takich jak przechodzenie po HTML i manipulowanie za pomocą selektorów CSS, takich jak jQuery. Musisz tylko złapać go jako
Document
, a nie jako plikString
.Naprawdę nie masz chcesz uruchamiać podstawowych metod String, a nawet wyrażeń regularnych w HTML, aby to przetworzyć.
Zobacz też:
źródło
;)
NetworkOnMainThreadException
Odpowiedź Billa jest bardzo dobra, ale możesz chcieć zrobić kilka rzeczy z żądaniem, takich jak kompresja lub klienty użytkownika. Poniższy kod pokazuje, w jaki sposób można zastosować różne typy kompresji do żądań.
Aby ustawić również klienta użytkownika, dodaj następujący kod:
źródło
Cóż, możesz skorzystać z wbudowanych bibliotek, takich jak URL i URLConnection , ale nie zapewniają one dużej kontroli.
Osobiście wybrałbym bibliotekę Apache HTTPClient .Edit: HTTPClient został ustawiony do końca życia przez Apache. Zamiennik to: Składniki HTTP
źródło
Wszystkie wyżej wymienione podejścia nie powodują pobrania tekstu strony internetowej tak, jak wygląda w przeglądarce. obecnie wiele danych jest ładowanych do przeglądarek poprzez skrypty na stronach html. żadna z wyżej wymienionych technik nie obsługuje skryptów, po prostu pobiera tylko tekst HTML. HTMLUNIT obsługuje javascripts. więc jeśli chcesz pobrać tekst strony internetowej tak, jak wygląda w przeglądarce, powinieneś użyć HTMLUNIT .
źródło
Najprawdopodobniej będziesz musiał wyodrębnić kod z bezpiecznej strony internetowej (protokół https). W poniższym przykładzie plik html jest zapisywany do c: \ temp \ filename.html Ciesz się!
źródło
Na komputerze z systemem Unix / Linux możesz po prostu uruchomić „wget”, ale tak naprawdę nie jest to opcja, jeśli piszesz klienta wieloplatformowego. Oczywiście zakłada się, że tak naprawdę nie chcesz robić zbyt wiele z danymi, które pobierasz między momentem ich pobrania a trafieniem na dysk.
źródło
Jetty ma klienta HTTP, którego można użyć do pobrania strony internetowej.
Przykład drukuje zawartość prostej strony internetowej.
W tutorialu Reading a web page in Java napisałem sześć przykładów programistycznego pobierania strony internetowej w Javie przy użyciu URL, JSoup, HtmlCleaner, Apache HttpClient, Jetty HttpClient i HtmlUnit.
źródło
Uzyskaj pomoc od tej klasy, pobiera kod i filtruje niektóre informacje.
źródło
Aby to zrobić przy użyciu potężnego NIO.2 Files.copy (InputStream in, Path target):
źródło
źródło