Szybki sposób znaleźć wartość w HTML (Java)

głosy
0

Korzystanie z wyrażeń regularnych, co jest najprostszym sposobem, aby sprowadzić na stronę HTML i znaleźć wartość wewnątrz tego znacznika (lub wartość dowolnego atrybutu dla tej sprawy):

<html>
  <head>
  [snip]
  <meta name=generator value=thevalue i'm looking for />
  [snip]
Utwórz 27/08/2008 o 23:28
źródło użytkownik
W innych językach...                            


7 odpowiedzi

głosy
8

Zależy jak wyrafinowane żądania HTTP trzeba zbudować (uwierzytelnianie, etc). Oto jeden prosty sposób Widziałem używane w przeszłości.

StringBuilder html = new StringBuilder();
java.net.URL url = new URL("http://www.google.com/");
BufferedReader input = null;
try {
    input new BufferedReader(
        new InputStreamReader(url.openStream()));

    String htmlLine;
    while ((htmlLine=input.readLine())!=null) {
        html.appendLine(htmlLine);
    }
}
finally {
    input.close();
}

Pattern exp = Pattern.compile(
    "<meta name=\"generator\" value=\"([^\"]*)\" />");
Matcher matcher = exp.matcher(html.toString());
if(matcher.find())
{
    System.out.println("Generator: "+matcher.group(1));
}

Prawdopodobnie wiele literówek tutaj, aby znaleźć, gdy skompilowany. (Nadzieję, że to nie była praca domowa)

Odpowiedział 27/08/2008 o 23:38
źródło użytkownik

głosy
0

Możesz sprawdzić w dokumentacji pakietu org.apache.commons.HttpClient Apache i powiązanych pakietów tutaj . Wysyłanie żądania HTTP z aplikacji Java jest bardzo łatwe do zrobienia. Wywiercenie poprzez dokumentacji powinien dostać cię w dobrym kierunku.

Odpowiedział 28/08/2008 o 00:22
źródło użytkownik

głosy
0

Nie próbowałem, ale nie podstawowe ramy być

  1. Otwórz java.net.HttpURLConnection
  2. Uzyskać strumień wejściowy z wykorzystaniem getInputStream
  3. Użyj wyrażenia regularnego w odpowiedzi Mike'a do analizowania z bitu, który chcesz
Odpowiedział 28/08/2008 o 00:26
źródło użytkownik

głosy
0

Ściśle mówiąc naprawdę nie można mieć pewność, że masz odpowiednią wartość, ponieważ tag może być komentarzem lub tag może być wielkimi literami itp To zależy od tego, jak jesteś pewien, że HTML można uznać za „nice ”.

Odpowiedział 19/09/2008 o 10:07
źródło użytkownik

głosy
1

należy używać kwerendy XPath. It'ls tak proste, jak się wartość "/ html / głowy / meta [@ name = generatora] / wartość @".

dobry poradnik: parsowanie dokumentu XML z XPath

Odpowiedział 26/09/2008 o 00:09
źródło użytkownik

głosy
0

To zależy.

Jeśli wydobywania informacji z witryny lub witryn, które są gwarantowane do sensownych HTML, a wiesz, że <meta> nie będzie ukrywane w jakiś sposób następnie czytania <head> linię przekroju po linii i zastosowanie regex jest dobrym podejściem.

Z drugiej strony, jeśli HTML mogą być zniekształcone lub „trudne”, a następnie trzeba użyć odpowiedniego parser HTML, ewentualnie wydaniem jednego takiego HTMLTidy. Strzeż się za pomocą ścisłego HTML lub XML parser na rzeczy trawled z przypadkowych stron. Wiele tzw HTML można znaleźć tam jest rzeczywiście źle sformułowany.

Odpowiedział 22/11/2009 o 08:23
źródło użytkownik

głosy
4

Jego niesamowite, jak nikt, gdy Adresowanie problemu przy użyciu regex z HTML, konfrontuje problem z HTML często nie są dobrze uformowane, czyniąc wiele analizatorów składni HTML całkowicie bezużyteczne.

Jeśli opracowanie narzędzi do analizy stron internetowych i jest to fakt, że nie są one dobrze uformowaną HTML, stwierdzenie „Regex nigdy nie powinny być używane do analizowania HTML” og „używać parser HTML” jest po prostu całkowicie fałszywe. Fakty są takie, że w realnym świecie, ludzie tworzą HTML, jak czują się podoba - i niekoniecznie nadają się do analizatorów.

RegEx jest całkowicie poprawny sposób na znalezienie elementów w tekście, a więc w HTML. Jeśli istnieje jakikolwiek inny rozsądny sposób, aby zmierzyć się z problemami Original Poster, a następnie umieszczać je zamiast odnosząc się do „użytkowania parser” lub „RTFM” oświadczeniu.

Odpowiedział 16/12/2010 o 21:02
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more