Extraire du texte d'un fichier html à l'aide de java


Je travaille sur un robot de recherche de texte et j'ai besoin d'extraire un certain texte de plusieurs sites. J'ai utilisé l'analyseur html jsoup:

Document doc = Jsoup.connect("http://www.aljazeera.net/programs/behindthenews/2014/11/9/%D8%A3%D8%B3%D8%A8%D8%A7%D8%A8-%D9%88%D8%AF%D9%84%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D8%B3%D8%AA%D9%85%D8%B1%D8%A7%D8%B1-%D8%A7%D9%84%D8%B5%D8%AF%D8%A7%D9%85-%D8%A8%D8%AC%D8%A7%D9%85%D8%B9%D8%A7%D8%AA-%D9%85%D8%B5%D8%B1").get();
Elements ps = doc.select("p");
String s = Jsoup.parse(ps.text()).text();
PrintWriter out = new PrintWriter("newFile.txt", "UTF-8");
out.write(s);
out.close();

Cet algorithme me donne un texte indésirable, le texte recherché est sous cette balise <p dir="rtl">

Et lorsque je change ma sélection en Elements ps = doc.select("p dir=rtl");, il renvoie une erreur de compilation.

Existe - t-il un moyen de le faire simplement sélectionner cette balise recherchée?

Author: Stephan, 2016-03-14

2 answers

Le texte recherché se trouve sous cette balise

Vous devez utiliser la requête CSS suivante:

p          /* Select any p element... */
[dir=rtl]  /* ... with a 'dir' attribute set to "rtl" */
Je ne sais pas si c'est le cas.http://www.aljazeera.net/programs/behindthenews/2014/11/9/أسباب-ودلالات-استمرار-الصدام-بجامعات-مصر

L'URL ci-dessus doit être encodée. Nous allons utiliser la méthode URI#create helper. Sur l'instance URI renvoyée, nous invoquerons la méthode toASCIIString.

URI uri = URI //
           .create("http://www.aljazeera.net/programs/behindthenews/2014/11/9/أسباب-ودلالات-استمرار-الصدام-بجامعات-مصر") //
           .toASCIIString();

Voici un exemple de code de travail:

ÉCHANTILLON CODE

Document doc = Jsoup.connect("http://www.aljazeera.net/").get();

Elements sublinks = doc.select("a[href*=/programs/behindthenews]");
System.out.println("Sublinks found: " + sublinks.size() + "\n*****");

for (Element sublink : sublinks) {
    String url = URI.create(sublink.absUrl("href")).toASCIIString();

    Document subLinkPage = Jsoup.connect(url).get();

    System.out.println(subLinkPage.select("p[dir=rtl]"));
    System.out.println("-------------------------");
}    

SORTIE (contenu dépouillé)

Sublinks found: 5
*****
<p dir="rtl">وحول هذا الموضوع وصف مدير مكتب الجزيرة في موسكو زاور شوج قرار الرئيس بوتين بالخطوة المفاجئة، باعتبار أن الروس وضعوا سقفا زمنيا مفتوحا لتدخلهم العسكري، يتراوح بين 12 و18 شهرا.</p>
<p dir="rtl">
(...)
-------------------------
<p dir="rtl">وحول هذا الموضوع وصف مدير مكتب الجزيرة في موسكو زاور شوج قرار الرئيس بوتين بالخطوة المفاجئة، باعتبار أن الروس وضعوا سقفا زمنيا مفتوحا لتدخلهم العسكري، يتراوح بين 12 و18 شهرا.</p>
<p dir="rtl">
(...)
-------------------------
(...)
 0
Author: Stephan, 2016-03-15 09:32:31

Le code ci-dessous capturera toutes les balises <p dir="rtl">:

String uri = URI.create("example.com").toASCIIString();
Document doc = Jsoup.connect(uri).get();
Elements pElements = doc.select("p[dir=rtl]");

StringBuilder sb = new StringBuilder();
for (Element element : pElements) {
    sb.append(element.text());
}

PrintWriter out = new PrintWriter("newFile.txt", "UTF-8");
out.write(sb.toString());
out.close();

La seule chose délicate est que, vous devez utiliser des URL encodées (et non celle avec des lettres arabes).

Modifier 1: L'encodage d'URL peut être effectué dans le code.

 0
Author: Navid Shakibapour, 2016-03-15 13:37:05