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?
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">
(...)
-------------------------
(...)
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.