Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Suche » Suchergebnis » Hallo Gast [Anmelden|Registrieren]
Zeige Beiträge 1 bis 10 von 10 Treffern
Autor Beitrag
Thema: Internetseite mit jsoup crawlen [java]
matt99

Antworten: 4
Hits: 4.289
25.10.2016 17:53 Forum: Praktische Informatik


Funktioniert :) Besten dank
Thema: Internetseite mit jsoup crawlen [java]
matt99

Antworten: 4
Hits: 4.289
25.10.2016 16:40 Forum: Praktische Informatik


Tatsächlich war es nur nicht in der main-Methode. Das ist das nicht gleich gesehen habe...

Danke!

Weißt du auch zufällig eine Möglichkeit, das Ende einer Seite zu bekommen? Wenn die Internetseite nur 10 Seiten hat, dann kriege ich ab Seite 11 eine Exception. Kann man das irgendwie mit einer while-Schleife, o.ä. abfangen? Im Endeffekt soll mein i solange erhöht werden, bis das ende der Website gefunden wurde.
Thema: Internetseite mit jsoup crawlen [java]
matt99

Antworten: 4
Hits: 4.289
Internetseite mit jsoup crawlen [java] 24.10.2016 20:34 Forum: Praktische Informatik


Hallo, ich möchte eine Internetseite mit Java (jsoup) durchstöbern. Diese Internetseite hat jedoch mehrere Seiten, welche ich alle nacheinander einmal besuchen möchte und anschließend alle Zahlen der entsprechenden Seite ausgeben soll. Ich habe zwar eine grobe Idee, wie das Programm eine Seite nach der anderen durchsucht, jedoch scheitert es an der Umsetzung.

Mein bisheriger Code:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class crawler {
  private static final int ms_timeout = 5000;
  
  public static void main(String[] args) throws MalformedURLException, IOException
  {
    Document doc = Jsoup.parse(new URL("eineinternetseite.de"), ms_timeout);

    String htmlString = doc.toString();
    
	Pattern pattern = Pattern.compile("\\d+");
	Matcher matcher = pattern.matcher(htmlString);
	
	while(matcher.find())
	{
		System.out.println(matcher.group());
	}
  }
  
}


Meine Idee: Einen Integer nach der URL setzen, welche solange hochgerechnet wird bis das "Ende der Internetseite" erreicht ist, bzw. einfach keine weitere Seite mehr kommt.
Mein Vorteil ist, dass die Internetseite durch ein /page sich trennt. Also:
eineinternetseite.de/page/1 ist Seite 1, eineinternetseite.de/page/2 ist Seite 2, usw.

code:
1:
    Document doc = Jsoup.parse(new URL("eineinternetseite.de/page/" + i), ms_timeout);


Wenn ich jedoch i als Integer definiere, dessen Startwert 1 ist und dann jedesmal i++ durchgeht, bekomme ich eine Fehlermeldung, dass der Typ static sein muss. Und an diesem Punkt kann ich diesen Integer auch nicht mehr erhöhen.
Thema: Zwei Textdateien vergleichen und Gemeinsamkeiten auflisten [Java]
matt99

Antworten: 6
Hits: 5.928
10.10.2016 10:37 Forum: Praktische Informatik


Super, dank dem Vorschlag funktioniert alles! Die Schnittstelle zwischen P und W haut damit auch hin. Besten dank für deine Hilfe.
Thema: Zwei Textdateien vergleichen und Gemeinsamkeiten auflisten [Java]
matt99

Antworten: 6
Hits: 5.928
09.10.2016 20:21 Forum: Praktische Informatik


Vielen Dank für den Gedankenanstoss. line.split und HashSet funktionieren prima für diesen Fall. Alles sieht bisher so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Date;
import java.util.HashSet;

public class testerfuerforum {
	public static void main(String[] args) throws IOException {
		Date startzeit = new Date();

		// Dateipfade übergeben
		String w_dateipfad = "pfad\\w_test.txt";
		String p_dateipfad = "pfad\\p_test.txt";
		File w_datei = new File(w_dateipfad);
		File p_datei = new File(p_dateipfad);

		BufferedReader bufferedReaderW;
		BufferedReader bufferedReaderP;
		bufferedReaderW = new BufferedReader(new FileReader(w_datei));
		bufferedReaderP = new BufferedReader(new FileReader(p_datei));

		String zeilenW;
		String zeilenP;
		HashSet<String> hashset_Z = new HashSet<String>();
		HashSet<String> hashset_w = new HashSet<String>();
		HashSet<String> hashset_p = new HashSet<String>();

		// W durchgehen, Integer a für Anzahl der Wörter
		int a = 0;
		while (null != (zeilenW = bufferedReaderW.readLine())) {
			// mit String split alle Wörter beim Leerzeichen trennen
			for (String leerzeichen_teiler_W : zeilenW.split(" ")) {
				a++;
				hashset_w.add(leerzeichen_teiler_W);
			}
		}

		// P durchgehen, Integer b für Anzahl der Wörter
		int b = 0;
		while (null != (zeilenP = bufferedReaderP.readLine())) {
			// mit String split alle Wörter beim Leerzeichen trennen
			for (String leerzeichen_teiler_P : zeilenP.split(" ")) {
				b++;
				hashset_p.add(leerzeichen_teiler_P);				
			}
		}
                //HashSet, Wörteranzahl und Zeit ausgeben 
		System.out.println(leerzeichen_teiler_P);
		System.out.println(hashset_w);
		System.out.println(hashset_p);
		System.out.println("\n\nDauer: "
				+ (System.currentTimeMillis() - startzeit.getTime()) + " ms"
				+ "\nGesamtanzahl der Wörter: " + a + " und " + b);
		bufferedReaderW.close();
		bufferedReaderP.close();

	}
}


Ich habe seperat W und P gelesen. Nun hänge ich noch am HashSet.contains(). Im Internet habe ich gelesen, dass dies als boolean funktioniert. Mein Gedanke war daher die komplette Liste W erst als HashSet einzulesen, danach die Liste P. Nach jeder eingelesenen Zeile soll dann über den boolean geschaut werden, ob das aktuelle Wort in P in der gesamten Liste in W vorkommt. Ist dem so, dann bekomme ich ein true zurück und in diesem Fall wird ein neuer HashSet (nennen wir diesen einfach Z) um genau dieses Wort ergänzt.
Soviel zur Theorie. Den folgenden Code-Ausschnitt habe ich daher über dem Kommentar
code:
1:
//HashSet, Wörteranzahl und Zeit ausgeben 
gelegt.

Am Anfang des Codes habe ich
code:
1:
HashSet<String> hashset_Z = new HashSet<String>();

definiert.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
		// P durchgehen, Integer b für Anzahl der Wörter
		int b = 0;
		while (null != (zeilenP = bufferedReaderP.readLine())) {
			// mit String split alle Wörter beim Leerzeichen trennen
			for (String leerzeichen_teiler_P : zeilenP.split(" ")) {
				b++;
				hashset_p.add(leerzeichen_teiler_P);
				boolean treffer = hashset_p.contains(hashset_w);
				if (treffer) {
					hashset_Z.add(leerzeichen_teiler_P);
				}
			}
		}

(und das mit dem Einrücken müsste ich auch noch einmal üben~)

Wenn ich nun über
code:
1:
System.out.println(hashset_Z);

mein hashset_Z abfrage, ist dies leer. Wird wohl auch daran liegen, dass ich den hashset_z nicht mit leerzeichen_teiler_P ergänzen sollte, sondern mit einem anderen String an einer bestimmten Stelle (?).
Eventuell hast du da auch eine weitere Idee?
Thema: Zwei Textdateien vergleichen und Gemeinsamkeiten auflisten [Java]
matt99

Antworten: 6
Hits: 5.928
09.10.2016 10:47 Forum: Praktische Informatik


Zitat:
Original von eulerscheZahl
Kann ich davon ausgehen, dass du Zeile x der einen Datei mit Zeile x der anderen vergleichen willst? Oder kann es sein, dass bei einer Datei dazwischen etwas eingefügt wurde?
Geht es nur um gleich/verschieden, oder willst du auch wissen, was verschieden ist?

Die Textdateien sind Listen. Diese sehen ungefähr so aus:

Liste P
Dies
ist
eine
Liste

Liste W
Hier
stehen
Wörter
in
der
Liste

Die Anzahl der Wörter in beiden Listen variiert. Nun will ich schauen, welche Wörter in W auch in P vorkommen. In diesem Fall das Wort "Liste". Und dies hätte ich gern auch als Ausgabe. Die Wörter welche in beiden vorkommen und die Anzahl dieser Wörter (in diesem Fall 1).

Zitat:
Original von eulerscheZahl
Zitat:
Mein Problem sind aber Textdateien, dessen Inhalt nebeneinander hinweg geschrieben sind.

verstehe ich nicht, kannst du ein Beispiel geben?

Bisher bin ich gedanklich nur das Szenario durchgegangen, dass alle Liste (welche als Parameter eingeladen werden) untereinander hinweg geschrieben sind, wie das Beispiel. Mein Problem sind nun aber auch Listen, deren Wörter nacheinander hinterlegt sind, oder gar komplett durcheinander. z.B.

Liste P:
Dies ist eine
Liste

Ich müsste also über ein Tokenization die Leerzeichen erkennen und auch diese als "Trenner" beachten. Mit dem derzeitigen Code erkennt er ja nur Zeile für Zeile. Er würde also in diesem Beispiel sagen "Dies ist eine" und "Liste", Anzahl der Wörter: 2.
Thema: Zwei Textdateien vergleichen und Gemeinsamkeiten auflisten [Java]
matt99

Antworten: 6
Hits: 5.928
Zwei Textdateien vergleichen und Gemeinsamkeiten auflisten [Java] 08.10.2016 22:11 Forum: Praktische Informatik


Hallo,

ich möchte mit Java ein Programm schreiben, was zwei Textdateien (w_test.txt als w und p_test.txt als p) einlesen kann, diese vergleicht und die Gemeinsamkeiten anschließend auflistet. In meinem bisherigen Ansatz habe ich beide Textdatei eingelesen und die erste Datei untereinander hinweg ausgegeben (inkl. Zählung aller Wörter und der Laufzeit des Programms).
Wie kriege ich nun einen Vergleich inkl. der entsprechenden Ausgabe hin?
Auch wollte ich es so machen, dass die Wörter alle untereinander hinweg ausgegeben werden. Mein Problem sind aber Textdateien, dessen Inhalt nebeneinander hinweg geschrieben sind. Hier müsste also durch Leerzeichen eine Trennung erfolgen. Beide Fälle müssten damit abgedeckt sein-

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Date;

 
public class readtester
{
	public static void main(String[] args) throws IOException
	{
		Date startzeit=new Date();

        //Dateipfade übergeben
        String w_dateipfad ="pfad\\w_test.txt"; 
        String pe_dateipfad ="pfad\\p_test.txt"; 
        File w_datei = new File(w_dateipfad); 
        File p_datei = new File(p_dateipfad); 

        BufferedReader bufferedReaderW; 
        BufferedReader bufferedReaderP; 
        bufferedReaderW = new BufferedReader(new FileReader(w_datei)); 
        bufferedReaderP = new BufferedReader(new FileReader(p_datei)); 
        
        String zeilenW;         
        int i = 0;
        while (null != (zeilenW = bufferedReaderW.readLine())) { 
        i++;
        System.out.println(zeilenW); 
                               
          }

        System.out.println("\nDauer: " +(System.currentTimeMillis() - startzeit.getTime()) + " ms" + "\nGesamtanzahl der Wörter aus W: " + i);
        bufferedReaderW.close();
        bufferedReaderP.close();

	}
}
Thema: Little und Big Endian richtig anwenden
matt99

Antworten: 1
Hits: 3.090
Little und Big Endian richtig anwenden 10.09.2016 23:37 Forum: Technische Informatik


Passte hier für mich am besten rein, da es ja schon was mit Rechnerarchitektur zu tun hat...

Und zwar wollte ich wissen wie man Little bzw. Big Endian richtig anwendet? In den Vorlesungen und im Internet fand ich immer formal, dass das niederwertigste Byte bzw. das höherwertigste Byte am Anfang steht (bzw. die Reihenfolge angibt). Ich wollte zum einen wissen was mit nieder- und höherwertig gemeint ist? Wirklich nur simpel, welches Byte den niedrigsten Wert hat (sprich 1 < 2, etc)?
Nehmen wir als Beispiel D7 00. In diesem Fall wäre ja 00 das niederwertigste, da 0C in Dezimalschreibweise 215 ist und damit größer 0. Also wäre D7 00 bereits Big Endian Schreibweise und in Little Endian Form 00 D7?

Im Internet fand ich auch Erklärungen, die genau das Gegenteil erläuterten. Beispielsweise auf
cdn3.raywenderlich.com/wp-content/uploads/2012/04/Big-endian-vs-little-endi
an.png

44 33 22 11 ist doch Big Endian (höherwertigstes Byte, also 44, als erstes) und 11 22 33 44 Little Endian (niederwertigstes Byte, als 11, als erstes).

Und wo wir beim Thema sind, wir kommt das englische Wikipedia auf die folgenden Dezimal-Umrechnungen? Also, das 0C zB 32 sei (0C ist ja das gleiche wie C, was in Dezimal 12 sind)?
upload.wikimedia.org/wikipedia/en/7/77/Big-little_endian.png
Thema: Date + 1 (Rechnung) in SQL
matt99

Antworten: 1
Hits: 4.355
Date + 1 (Rechnung) in SQL 11.08.2016 18:31 Forum: Datenbanken


Ich möchte gern ein bestimmtes Datum + 1 (sprich einen Tag drauf) rechnen und dieses ausgeben.
Das Datum, welches ich verrechnen will, ist bereits in einer Spalte datum vorhanden, es geht also nicht um den getdate()-Befehl (auf den ich immer wieder durch googlen traf).

Mein Problem: Wenn ich nun folgendes rechne
(datum + 1) as ein_tag_danach
dann wird das Datumsformat zerhauen. Ich erhalte anscheinend einen varchar als Datentyp zurück, will aber das date-Format behalten. Sprich, aus 2016-08-11 wird 20160811 (bzw durch +1 20160812). Mit convert und cast habe ich es leider nciht hinbekommen - jemand eine Idee?
Thema: [Oracle SQL Developer] Foreign/Primary-Keys bzw Gemeinsamkeiten anzeigen
matt99

Antworten: 0
Hits: 3.427
[Oracle SQL Developer] Foreign/Primary-Keys bzw Gemeinsamkeiten anzeigen 23.07.2016 16:06 Forum: Datenbanken


Was kürzeres fiel mir so auf Anhieb nicht ein : )
Und zwar wollte ich wissen, wie man sich beim SQL Developer von Oracle auf Anhieb Schnittstellen bzw. Beziehungen von einzelnen Tabellen anzeigen kann?
Konkretes Problem: Ich weiß, dass man sich mit dem Data Modeller eine schicke Übersicht machen kann und die FKs und PKs anzeigen lassen kann. Wenn man aber nun eine schlecht erstellte/gepflegte Datenbank hat, sind diese (nicht immer) hinterlegt. Auch benötige ich ja meines Wissens nach keine FKs und PKs um Tabellen zu joinen, solange ich "einen gemeinsamen Nenner" (zum Beispiel Personalnummern) habe.
Nehmen wir folgendes als Beispiel: Meine Datenbank hat 100 Tabellen und ich will Tabelle x mit Tabelle y verbinden um Ergebnis z zu erhalten. Nun weiß ich nicht wo meine Informationen hinterlegt sind um Ergebnis z zu erhalten bzw. kenne ich entsprechend Tabelle x/y nicht um einen Join zu machen. Gibt es nun einen Befehl a la

select schnittstelle-fuer-join from tabelle x, tabelle y

oder noch besser

select schnittstelle-fuer-join from tabelle x, und-tabelle-y-muss-der-develeoper-selber-finden

?

Es ist halt problematisch wenn man 100 Tabellen hat und jede Tabelle erst durchforsten muss, eh man die "Beziehung für den Join" gefunden hat. Ich hoffe man versteht mein Problem.
Zeige Beiträge 1 bis 10 von 10 Treffern