htlm parser

micha2233

Aktives Mitglied
Hab folgendes Problem:

ich hab einen Html Parser geschieben und filtert mir schon die Texte aus den html tags leider nur die Erste Zeile des html tags, weiß nicht wie ich vorgehen muss, wenn in der Quelle meherer Zeilen hat und dann so aussieht:
Code:
257.011-001;Rechner RN6 mit EURONAV IV;Rechner RN6 mit EURONAV IV;RN6 ENAV IV;Rechner RN6 mit EURONAV IV;<html><head></head><body><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">RN6 - Digital Map Generator</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">16-Kanal-GPS-Empfänger</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Digital Map System Software EURONAV IV</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Verarbeitung von Raster- & Vektor-Karten sowie Höhen-Modellen,</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Moving Map, Flugplanung, Flugaufzeichnung,</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Terrain Warning & Emergency Mode</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Missionsplanung, benutzerdefinierte Datenbanken,</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Checklisten u.v.m.</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Beinhaltete Karten:</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Jeppesen(R) fujara Datenbank</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0""></font></body></html>#;<html><head></head><body><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Digital Map Generator</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">16-channel GPS-Receiver</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Digital Map System Software EURO IV</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Processing raster & vector charts as well as Digital Terrain Data</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Moving Map, Flight Planning, Flight Recording</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Terrain Warning & Emergency Mode,</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Mission Planning, user defined Databases</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Check Lists </font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Included Maps/Charts:</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0"">Jeppesen(R) fujara  Database</font></p><p style=""margin-top: 0""><font font-family=""null"" font-size=""0""></font></body></html>#;

Java:
import com.csvreader.CsvReader;
import com.csvreader.CsvWriter;
import sun.java2d.SunGraphicsEnvironment;

import java.io.BufferedReader;
import java.io.FileDescriptor;
import java.io.FileReader;
import java.io.FileWriter;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

/**
 * User: kd
 * Date: 27.08.12
 * Time: 17:29
 */
public class ParserEAN
{

  public static void main(String[] args)
  {
    ParserEAN p = new ParserEAN();
    p.performTextPrepare();
  }

  public ParserEAN()
  {
  }

  public void performTextPrepare()
  {
    try
    {
      CsvReader cr = new CsvReader("c:/Entwicklungsordner/java/htmlParserEan/html/cut.xhtml", ";".charAt(0), Charset.forName("UTF-8"));

      List<TextRecord> exportTexts = new ArrayList<TextRecord>();
      String currentLine = null;

//
      while (cr.readRecord())
      {
        String[] currentRow = cr.getValues();


        TextRecord trec = new TextRecord();
        trec.setAbasId(currentRow[0]);
        trec.setBesch(currentRow[1]);
        trec.setNamezwei(currentRow[2]);
        trec.setVkbez(currentRow[3]);
        trec.setDescIntern(currentRow[4]);
        trec.setDescDE(cleanHTML(currentRow[5]));
        trec.setDescEN(cleanHTML(currentRow[6]));



        exportTexts.add(trec);
      }

      // Export List exportTexts to CSV ...
      String header = "abasId;besch;namezwei;vkbez;intern;textDE;textEN";
      CsvWriter csvw = new CsvWriter("c:/Entwicklungsordner/java/htmlParserEan/html/test.csv", ";".charAt(0), Charset.forName("UTF-8"));
      csvw.setUseTextQualifier(false);

      for (int i = 0; i < exportTexts.size(); i++)
      {
        TextRecord tr = exportTexts.get(i);
        csvw.writeRecord(tr.getTextColumns());
        csvw.endRecord();
      }

      csvw.flush();
      csvw.close();

    } catch (Exception e)
    {
      e.printStackTrace();
    }
  }

  private String cleanHTML(String dirtyHTML)
  {
    int spos = 0;
    int epos = 0;
    int cpos = 0;
    String result = new String();

    if (dirtyHTML != null && dirtyHTML.length() > 0)
    {
      try
      {
        spos = dirtyHTML.indexOf("<font ", spos);
        cpos = dirtyHTML.indexOf(">", spos);
        epos = dirtyHTML.indexOf("</font>", cpos);
        String t = dirtyHTML.substring(cpos+1, epos);
        result = t;
      } catch (IndexOutOfBoundsException iob)
      {
        System.out.println("iob: " + dirtyHTML);
      }
    }

    return result;
  }

}

hier die Methoden

Java:
import java.util.jar.Attributes;

/**
 * User: kd
 * Date: 29.08.12
 * Time: 15:56
 */
public class TextRecord
{
  public String abasId;
  public String besch;
  public String namezwei;
  public String vkbez;
  public String descIntern;
  public String descDE;
  public String descEN;

  private String[] textColumns = new String[7];

  public TextRecord()
  {
  }

  public String getAbasId()
  {
    return abasId;
  }

  public void setAbasId(String abasId)
  {
    textColumns[0] = abasId;
    this.abasId = abasId;
  }

  public String getBesch()
  {
    return besch;
  }

  public void setBesch(String besch)
  {
     textColumns[1] = besch;
     this.besch = besch;
  }

  public String getNamezwei()
  {
     return namezwei;
  }

  public void setNamezwei(String namezwei)
  {
     textColumns[2] = namezwei;
     this.namezwei = namezwei;
  }

  public String getVkbez()
  {
     return vkbez;
  }

  public void setVkbez(String vkbez)
  {
     textColumns[3] = vkbez;
     this.vkbez = vkbez;
  }


  public String getDescIntern()
  {
    return descIntern;
  }

  public void setDescIntern(String descIntern)
  {
    textColumns[4] = descIntern;
    this.descIntern = descIntern;
  }

  public String getDescDE()
  {
    return descDE;
  }

  public void setDescDE(String descDE)
  {
    textColumns[5] = descDE;
    this.descDE = descDE;
  }

  public String getDescEN()
  {
    return descEN;
  }

  public void setDescEN(String descEN)
  {
    textColumns[6] = descEN;
    this.descEN = descEN;
  }

  public String[] getTextColumns()
  {
    return textColumns;
  }
}

Könnte mir jemand helfen?

Gruß

Micha
 
M

michaaa2233

Gast
Ich galube in dieser Methode ist das Problem. Ich müsste ne Schleife bauen, und die gefundenen Texte addieren und erst Rausschreiben, wenn nicht mehr gefunden wird.
Habt ihr ne Idee, wie ich das am besten lösen könnte?

Java:
private String cleanHTML(String dirtyHTML)
  {
    int spos = 0;
    int epos = 0;
    int cpos = 0;
    String result = new String();
 
    if (dirtyHTML != null && dirtyHTML.length() > 0)
    {
      try
      {
        spos = dirtyHTML.indexOf("<font ", spos);
        cpos = dirtyHTML.indexOf(">", spos);
        epos = dirtyHTML.indexOf("</font>", cpos);
        String t = dirtyHTML.substring(cpos+1, epos);
        result = t;
      } catch (IndexOutOfBoundsException iob)
      {
        System.out.println("iob: " + dirtyHTML);
      }
    }
 
    return result;
  }
 

Noctarius

Top Contributor
Warum selber einen HTML Parser schreiben, wenn andere sich mit all diesen Problemen rumgeschlagen haben? Besonders wenn das HTML nicht mehr sauber ist wird es hässlich. Nimm hier lieber eine fertige Lib.
 

micha2233

Aktives Mitglied
Hallo Noctarius,

Du hast natürlich Recht, dass ich mich da mit einem kaputtem HTML rum schlagen muss. Ich habs auch mit JTIDY versucht und bin gar nicht klar gekommen mit der API. :(
Hättest Du da ein Ansatz wie ich die Möglichkeiten von JTIDY effektiv für mein Fall nutzen könnte? Gebe zu, dass ich noch ein Anfänger bin. :/

Viele Grüße

Micha
 

Marco13

Top Contributor
Ich hatte mal ein paar HTML-Parser verglichen, aber das ist eine Weile her, deswegen kann ich jetzt NICHT (mehr) sagen, ob die schon vorgeschlagenen "besser" oder "schlechter" sind. Deswegen NUR als weitere Option: Ich fand Jericho HTML Parser ganz gut. Der schluckt auch so ziemlich alles wo mindestens eine "<" drin vorkommt, ist sehr ausführlich und weitreichend dokumentiert, und anhand der Beispiele auf der Startseite (wie z.B. dem "TextExtractor") kann man meistens schnell eigene Schnipsel zusammenstellen.
 
M

michaaa2233

Gast
Vielen Dank euch! Ich werde es mit eurenVorschlägen versuchen.

Viele Grüße

Micha
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
B Parser dynamisieren Java Basics - Anfänger-Themen 7
W Einfachen, ein beliebiges Zeichen oft erkennenden Regex Parser selber schreiben - wie vorgehen? Java Basics - Anfänger-Themen 12
D Input/Output CSV Parser list unvollständig Java Basics - Anfänger-Themen 25
U DOM Parser, kleine Frage Java Basics - Anfänger-Themen 29
H java date-time parser Java Basics - Anfänger-Themen 1
X SAX Parser, wie weit ist der eigentlich? Java Basics - Anfänger-Themen 6
O HTML -> BBCode Parser? Java Basics - Anfänger-Themen 3
J kleiner Fehler im FAQ Parser für mathematische Formeln Java Basics - Anfänger-Themen 5
H Welcher Html-Parser? Java Basics - Anfänger-Themen 8
U Benötige ich einen Parser? Java Basics - Anfänger-Themen 2
T Parser mit switch "Weg" ausgeben? Java Basics - Anfänger-Themen 5
A html parser Java Basics - Anfänger-Themen 5
T XML Parser Java Basics - Anfänger-Themen 21
data89 Frage zum FAQ-'Parser für mathematische Formeln' Java Basics - Anfänger-Themen 4
T Wofür Parser?? Java Basics - Anfänger-Themen 39
A Gettext-Parser: Rad neu erfinden Java Basics - Anfänger-Themen 6
G Eigener Parser Java Basics - Anfänger-Themen 4
G guter Parser Java Basics - Anfänger-Themen 4
G Parser liefert StackOverflow error Java Basics - Anfänger-Themen 6
L URL Parser (String zusammensetzen) Java Basics - Anfänger-Themen 2
G If-Parser + Interpreter Java Basics - Anfänger-Themen 9
E HTML Parser Java Basics - Anfänger-Themen 8
B Parser HTML Java Basics - Anfänger-Themen 10
J Noch ein Parser Problem Java Basics - Anfänger-Themen 7
J Richtigen Parser wählen Java Basics - Anfänger-Themen 2
M.C.S. Parser: Flut von Variablen und if-Conditions eindämmen Java Basics - Anfänger-Themen 4
A Parser Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben