Parsowanie strony HTML

0

Cześć,
Mam stronę HTML, z której chcę "wyłuskać" potrzebne mi informacje. Część kodu takiej strony:

<td style="vertical-align: top;"><a href="Ajdukiewicz/Index.htm">Ajdukiewicz,
Tadeusz</a><br>
      </td>
      <td style="vertical-align: top; text-align: center;"><big>1852-1916</big><br>
      </td>
      <td style="vertical-align: top; text-align: center;"><big>15</big><br>

      </td>
    </tr>
    <tr>
      <td style="vertical-align: top;"><big><a
 href="Alchimowicz/Index.htm">Alchimowicz, Kazimierz</a><br>
      </big></td>
      <td style="vertical-align: top; text-align: center;"><big>1840-1916<br>
      </big></td>
      <td style="vertical-align: top; text-align: center;"><big>8<br>

      </big></td>
    </tr>

Chcę z tego kodu wyciągnąć imiona i nazwiska. Załóżmy, że w zmiennej String firstPage mam cały ten kod html. Domyślam się że trzeba używać wyrażeń reguarnych, ale jak na razie mam z tym problemy...

Na razie wymyśliłam coś takiego (domyślam się, że wyrażenie regularne jest w ogóle złe). Poza tym, niestety jak można zauważyć tagi, które otaczają pierwsze nazwisko i drugie są troche inne (w jednym jest <big> </big> w drugim nie ma, no i tak jest na całej stronie - raz jest końcówka </a></big> raz </big></a> itd). Mógłby ktoś pomóc?:)

        Pattern wzorzec=Pattern.compile("<td .+><a href.+>(A.+)</a>");
        Matcher sekwencja=wzorzec.matcher(firstPage);
        Vector<String> w=new Vector<String>();

        while(sekwencja.find())
        {
            int start=sekwencja.start();
            int end=sekwencja.end();

            w.add(firstPage.substring(start, end));
        }
0

Jezeli to ma byc jednorazowa operacja to proponuje ci uŻyć dowolnego edytora tekstów który ma wbudowane reg exp.

0

Nie to nie ma być jednorazowa operacja. Użytkownik wybiera z listy pierwszą literę nazwiska, potem w następnej liście wybiera jedno nazwisko spośród wszystkich na literę np. "A", no a potem robię dalsze operacje. Muszę to mieć w programie.

0

Po tym jak pozbierasz wszystkie entery z przeszukiwanego tekstu (zeby Matcher sie nie pogubil:

Pattern.compile("<a href=\"(\\w+)(.+?>)(<big>)*+\\1,\\s*(\\w+)");

Interesuja nas: grupa 1 (nazwisko) i grupa 4 (imie).

0

Dzięki za odpowiedź, ale do końca nie rozumiem :(
Może zacznijmy od tego co dokładnie robi ta część wyrażenia regularnego: (<big>)+\1,\s(\w+)")

Rozumiem jeszcze że gwiazdka po (<big>) oznacza że jego wystąpienie jest opcjonalne, ale dalej się gubię.

Po tym jak pozbierasz wszystkie entery z przeszukiwanego tekstu (zeby Matcher sie nie pogubil

Hmmm jakie enetery?:P Jeśli chodzi o tego stringa w którym mam kod html to zzapisuję do niego w ten sposób:

in = new BufferedReader(new InputStreamReader(
                    new URL("http://pinakoteka.zascianek.pl/Artists.htm").openStream()));
            String line;
            while ((line = in.readLine()) != null) {
                firstPage+=line;
            }

jeśli to ma jakieś znaczenie.

0

Trochę niechlujnie i na szybkiego, ale czas spać już:

HTMLEditorKit.ParserCallback callback = 
		      new HTMLEditorKit.ParserCallback () {
				private int hreafPosition = -1;
			
		        @Override
		        public void handleStartTag(Tag t, MutableAttributeSet a, int pos) {
		        	if (HTML.Tag.A.equals(t)) {
		        		this.hreafPosition = pos;
		        	}
		        }

		        @Override
		        public void handleEndTag(Tag t, int pos) {
		        	if (HTML.Tag.A.equals(t)) {
		        		this.hreafPosition = -1;
		        	}
		        }
		        
		        @Override
		        public void handleText(char[] data, int pos) {
		        	if (pos > this.hreafPosition) {
		        		System.out.println(new String(data));
		        	}
		        }
	    };
	    final String text = "<td style=\"vertical-align: top;\"><a href=\"Ajdukiewicz/Index.htm\">Ajdukiewicz,Tadeusz</a><br>"+
      "</td>"+
      "<td style=\"vertical-align: top; text-align: center;\"><big>1852-1916</big><br>"+
      "</td>"+
     " <td style=\"vertical-align: top; text-align: center;\"><big>15</big><br>"+
      "</td>"+
    "</tr>"+
    "<tr>"+
      "<td style=\"vertical-align: top;\"><big><a href=\"Alchimowicz/Index.htm\">Alchimowicz, Kazimierz</a><br>"+
      "</big></td>"+
      "<td style=\"vertical-align: top; text-align: center;\"><big>1840-1916<br>"+
      "</big></td>"+
      "<td style=\"vertical-align: top; text-align: center;\"><big>8<br>"+
      "</big></td>"+
    "</tr>";
	    try {
			new ParserDelegator().parse(new StringReader(text), callback, false);
		} catch (IOException e) {
			e.printStackTrace();
		}

Proponuje poczytać:
http://java.sun.com/products/jfc/tsc/articles/bookmarks/

0

Dziękuję wam obu za pomoc, nie miałam zielonego pojęcia że istnieje jakaś klasa do parsowania html-a :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1