2016-07-30 10 views
1

私はいくつかのHTMLデータを収集するプログラムを持っています。JAVA解析特殊文字

public class Uni_Extract { 
    public static void main(String[] args) throws Exception { 
     System.out.println("Started"); 

     String csvFile = "C://Users/Kennedy/Desktop/university.csv"; 
     FileWriter writer = new FileWriter(csvFile); 

     for (int i=2; i<=2; i++){ 
      String url = "http://www.4icu.org/reviews/index"+i+".htm"; 
      Document doc = Jsoup.connect(url).userAgent("Mozilla").get(); 

      Elements cells = doc.select("td.i"); 

      Iterator<Element> iterator = cells.iterator(); 
      while (iterator.hasNext()) { 
       Element cell = iterator.next(); 

       String university = Jsoup.parse((cell.select("a").text())).text(); 
       university = StringEscapeUtils.escapeHtml(university); 
       String country = cell.nextElementSibling().select("img").attr("alt"); 
       System.out.printf("country : %s, university : %s %n", country, university); 
      } 
     } 
     writer.flush(); 
     writer.close(); 
    } 
} 

しかし、私のプログラムでは、いくつかの特殊なチャーターが出現すると、元のHTMLコードが返されます。どのように私はそれらを解析する必要がありますか?

たとえば、「ö」を特殊文字として含むAzerbaycan D ö vlet Pedaqoji Universitetiが返されますか?どのように私はそれと他の同様のケースを解決することができますか?

+0

はここでHTMLに実際に何があるかです: 'Azerbaycan D ö vlet Aqrar Universiteti'。私はあなたのコードが出力するものと仮定します。おそらく 'ö'の代わりに 'ö'を見たいと思うでしょう。もしそうなら、あなたが探しているのはHTMLをエスケープする方法です。 – smarx

+0

ああ、あなたのコードを見ると、自分で 'escapeHtml'を呼んでいるようです。あなたがそれをやめたらどうなりますか? ( 'Jsoup'はすでにあなたのためにエスケープしていますが、何らかの理由でそれをエスケープしています) – smarx

+0

あなたのコードは、存在しない変数' university1'を使用しようとしています。実際の実行例を共有できますか? – smarx

答えて

1

コードを少し簡略化してescapeHtmlへの呼び出しを削除すると、すべて正常に動作しているようです。ここに私のコードおよび出力の該当する行です:

import org.jsoup.*; 
import org.jsoup.nodes.*; 
import org.jsoup.select.*; 

import java.io.*; 
import java.util.*; 

public class Test 
{ 
    public static void main(String[] args) throws IOException { 
     System.out.println("Started"); 

     String url = "http://www.4icu.org/reviews/index2.htm"; 
     Document doc = Jsoup.connect(url).userAgent("Mozilla").get(); 

     Elements cells = doc.select("td.i"); 

     Iterator<Element> iterator = cells.iterator(); 
     while (iterator.hasNext()) { 
      Element cell = iterator.next(); 

      String university = Jsoup.parse((cell.select("a").text())).text(); 
      String country = cell.nextElementSibling().select("img").attr("alt"); 
      System.out.printf("country : %s, university : %s %n", country, university); 
     } 
    } 
} 

出力:

... 
country : Azerbaijan, university : Azerbaycan Dövlet Aqrar Universiteti 
...