Skocz do zawartości
SanFable

Pobieranie danych z strony i parsowanie

    Rekomendowane odpowiedzi

    Dzakus

    Jest inny operator specjalnie dla klas

    Po za tym. Zapytałeś się twórcy strony o zgodę? Nie czyniąc tego łamiesz prawo.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Cubaza

    Łaś. Nie każdy programista to facet...

    Wysłane z mojego Nexus 4 przy użyciu Tapatalka

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Flakez

    Witam,

    Szukam dobrego parsera HTML (aby wydobyć dane z tabeli) wraz z przykładem zastosowania (najlepiej gotowa aplikacja, żeby zobaczyć jak to funkcjonuje).

    Za pomoc z góry bardzo dziękuję.

    Pozdrawiam, Flakez

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus
    Napisano (edytowane)

    Jsoup.

    Inny gotowy przykład. Pobieranie najnowszych wpisów z głównej serwisu wykop.pl

    import java.io.IOException;
    
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    public class WykopHome {
    public static void main(String[] args) throws IOException {
    	Document doc = Jsoup.connect("http://www.wykop.pl/").get();
    	for (Element article : doc.select("article")) {
    		Elements titleElements = article.select("header h2");
    		Elements descElements = article.select("span.c22");
    		if (titleElements.size() == 0 || descElements.size() == 0)
    			continue;
    		String title = titleElements.get(0).text();
    		String desc = descElements.get(0).text();
    		System.out.println("[" + title + "]");
    		System.out.println(desc);
    		System.out.println();
    
    	}
    }
    }
    

    Edytowane przez Dzakus

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Flakez
    Napisano (edytowane)

    Dzięki :)

    Czy można edytować to co jest w metodzie text() ?

    Za pomoc z góry dziękuję

    Edytowane przez Flakez

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Cubaza
    Napisano (edytowane)

    Nie osiągniesz tego w ten sposób. Tekst, czyli to co pobierasz metodą text() to w tym div właśnie 6 41. Jedyne miejsce skąd możesz wziąć dwukropek to parametr z linku a nie wiem czy jsoup to potrafi.

    Natomiast jak chcesz pobrać to jako godziny i minuty to możesz najpierw pobrac pierwszy parametr, potem drugi i połączyć dwukropkiem. Jednak musisz być pewny, że w span jest godzina a pod tekstem w hrefie są minuty.

    Wysłane z mojego Nexus 4 przy użyciu Tapatalka

    Edytowane przez Cubaza

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Flakez
    Napisano (edytowane)

    Dziękuję za odpowiedź.

    Edytowane przez Flakez

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    buxik

    Na stringu robisz split(':') i następnie do jednej tabeli dajesz godziny, do drugiej minuty i możesz połączyć, np.

    String date = hourTab[0]+":"+minsTab[0]

    itd.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Dzakus

    Document doc = Jsoup.connect("URL").get();
    Elements happyLinks = doc.select("div.table.margin-auto > div.row.over-clr > a[href]");
    for( Element e : happyLinks) {
                   String href =  link.absUrl("href");
                   Log.i(TAG, Uri.parse(href).getQueryParameter("time'));
    }

    Tak na szybko i nie testowałem.

    Inna opcja

    Document doc = Jsoup.connect("URL").get();
    Elements elements = doc.select("div.table.margin-auto > div.row.over-clr");
    for( Element e : elements) {
                   Log.i(TAG, e.text().replace(" ",":"));
    }

    Lub w ręczny sposób

    Document doc = Jsoup.connect("URL").get();
    Elements elements = doc.select("div.table.margin-auto > div.row.over-clr");
    for( Element e : elements) {
                   Elements first = e.select("span.first");
                   Elements two = e.select("a");
                   if (first.size() ==0 || two.size() == 0) continue;
                   String firstText = first.get(0);
                   String twoText = two.get(0);
                   Log.i(TAG, firstText + ":" + twoText); 
    }

    Kod bez testu pisany w przeglądarce. Może zawierać błędy, ale na pierwszy rzut oka wszystko okey.

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach
    Flakez

    Dziękuję za szybką odpowiedź. Po włożeniu tego do kodu programu, nie wywala żadnego błędu, natomiast po włączeniu AVD i próbie uruchomienia tej metody wyskakuje "Unfortunatelly app has stopped working".

    Udostępnij tę odpowiedź


    Odnośnik do odpowiedzi
    Udostępnij na innych stronach

    Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

    Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

    Zarejestruj nowe konto

    Załóż nowe konto. To bardzo proste!

    Zarejestruj się

    Zaloguj się

    Posiadasz już konto? Zaloguj się poniżej.

    Zaloguj się

    • Ostatnio przeglądający   0 użytkowników

      Brak zarejestrowanych użytkowników przeglądających tę stronę.

    x