bonjours, cela fait plusieurs jour que je cherche un exemple pour extraire des information du page web sans grand résulta si quelqu'un pouvait me donnée le debut d'une piste.
merci d'avance.
bonjours, cela fait plusieurs jour que je cherche un exemple pour extraire des information du page web sans grand résulta si quelqu'un pouvait me donnée le debut d'une piste.
merci d'avance.
Tu peux commencer à télécharger la page en utilisant URLConnection (n'oublie pas les timeout) exemple :
En ensuite il faut extraire les infos qui t'intéressent par exemple avec des expressions régulières mais tout dépend de la page en question.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 URLConnection cn = new URL(URL_DATA).openConnection(); cn.setConnectTimeout(15000); cn.setReadTimeout(15000); cn.connect(); InputStream stream = cn.getInputStream(); byte buf[] = new byte[16384]; StringBuffer out = new StringBuffer(); int numread; do { // Télécharge numread = stream.read(buf); // Ecrit dans le buffer if (numread > 0) out.append(new String(buf, 0, numread)); // Calcul de l'avancement // On compte 20% au début pour la connexion et 10% pour le traitement final publishProgress((int)((float)out.length() / (float)length * 70.0f) + 20); } while (numread > 0); stream.close(); return out.toString();
j'ai vue sur plusieurs site des référence a xpath, st il possible de l'utiliser sur des page html?
Sa dépend vraiment comment est faite la page, si c'est une page XML oui mais du HTML classique il y a des balises qui ne sont pas refermés par exemple <img> il n'y a pas de </img>, parfois <img /> qui est conforme au XML mais c'est loin d'être systématique. Et encore là c'est pour un fichier HTML valide !
Si c'est toi qui est à l'origine du fichier et que tu à la main sur le format alors tu peux utiliser un peu ce que tu veux mais si tu veux parser une page quelconque oublie ...
sa serai pour une page web quelconque quel serai la meilleur solution existe t'il des librairies?
ps : je n'est pas la main sur la page html
Me semble bizarre ce code:
D'un coté on lit des bytes... de l'autre on enregistre des chars...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 byte buf[] = new byte[16384]; StringBuffer out = new StringBuffer(); int numread; do { // Télécharge numread = stream.read(buf); // Ecrit dans le buffer if (numread > 0) out.append(new String(buf, 0, numread)); // Calcul de l'avancement // On compte 20% au début pour la connexion et 10% pour le traitement final publishProgress((int)((float)out.length() / (float)length * 70.0f) + 20); } while (numread > 0);
Avec comme conversion un "new String(buf,0,numread)" qui utilise donc UTF-16 par défaut, ce qui est loin d'être le défaut pour les pages web (ISO-8859-1).
Il faudrait peut-être lire le charset de la page avant non ?
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
voila j'essaye se bout de code mes j'ai une erreur qui fait que de sortir
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 public void test () { try { try { URL oracle = new URL("http://www.google.fr/"); URLConnection yc = oracle.openConnection(); BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) System.out.println(inputLine); in.close(); } catch (MalformedURLException me) { System.out.println(me); } } catch (Exception ex) { System.out.println(ex); } }
le problème viendrai de la ligne n°905-12 16:11:33.875: E/AndroidRuntime(14230): Caused by: android.os.NetworkOnMainThreadException
si quelqu'un a la solution merci d'avance
Utilisation du réseau interdite dans le thread réservé à l'UI (onCreate(), toutes les fonctions de l'activité en général).
Utiliser une AsyncTask pour effectuer des appels réseaux (et récupérer le résultat dans le thread UI).
N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
Et surtout
apres quelque recherche j'ai fait se petit bout de code pour parcourir le code source
seulement j'ai un petit problème a la ligne n°10.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 private void evaluer (String code) { String[] xpath = "/html/body/div[2]/div[2]/div[2]/div/table[1]/tbody/tr[1]/td[2]/a[1]".split("/"); String[] balise = new String[3]; int y = 0; int position = 0; for (int x=1; x<xpath.length; x++) { if (xpath[x].indexOf("[") != -1) { balise = xpath[x].split("["); } else { balise[0] = xpath[x]; } position = code.indexOf(balise[0],y); if ( position != -1){ y = position+1; } } balise[3] = "fin"; }
si je fait un split sur le caractere '[' j'ai un erreur :
merci d'avance05-13 22:13:49.575: E/AndroidRuntime(18574): java.util.regex.PatternSyntaxException: Missing closing bracket in character class near index 1:
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager