{"id":25500272,"url":"https://github.com/mexikoedi/java-web-scraper-mit-gui","last_synced_at":"2025-11-11T17:30:12.086Z","repository":{"id":258780201,"uuid":"872543143","full_name":"mexikoedi/Java-Web-Scraper-mit-GUI","owner":"mexikoedi","description":"Java Web Scraper mit GUI für das Abrufen von diversen Inhalten der HKA (Hochschule Karlsruhe – University of Applied Sciences).","archived":false,"fork":false,"pushed_at":"2025-01-17T18:10:56.000Z","size":1648,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-17T19:24:33.721Z","etag":null,"topics":["gui","hka","hochschule-karlsruhe","java","program","scraper","web"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mexikoedi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-14T16:06:37.000Z","updated_at":"2025-01-17T18:10:57.000Z","dependencies_parsed_at":"2024-10-27T17:40:50.083Z","dependency_job_id":"71078eec-cef7-46e0-bcf8-430ca0976029","html_url":"https://github.com/mexikoedi/Java-Web-Scraper-mit-GUI","commit_stats":null,"previous_names":["mexikoedi/java-web-scraper-mit-gui"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mexikoedi%2FJava-Web-Scraper-mit-GUI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mexikoedi%2FJava-Web-Scraper-mit-GUI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mexikoedi%2FJava-Web-Scraper-mit-GUI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mexikoedi%2FJava-Web-Scraper-mit-GUI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mexikoedi","download_url":"https://codeload.github.com/mexikoedi/Java-Web-Scraper-mit-GUI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239593044,"owners_count":19664855,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gui","hka","hochschule-karlsruhe","java","program","scraper","web"],"created_at":"2025-02-19T03:37:31.974Z","updated_at":"2025-11-11T17:30:11.987Z","avatar_url":"https://github.com/mexikoedi.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java Web Scraper mit GUI\n\n## Allgemeine Informationen\nDieses Java-Programm ermöglicht das unkomplizierte Abrufen von diversen [HKA (Hochschule Karlsruhe – University of Applied Sciences)](https://www.h-ka.de/) Informationen über eine grafische Benutzeroberfläche.\n\n## Anwenderdokumentation\n### Voraussetzungen\nEs muss vor der Benutzung dieses Programms [Java JDK 22](https://www.oracle.com/de/java/technologies/downloads/) oder höher auf dem Computer installiert werden.\n\n### Installation des Programms\nSie können das Programm herunterladen, indem Sie den grünen Knopf „Code“ und dann „ZIP herunterladen“ auswählen. \u003cbr\u003e \nAlternativ können Sie die ZIP-Datei über die Registerkarte „Releases“ herunterladen. \u003cbr\u003e\nAnschließend entpacken/extrahieren Sie die Zip-Datei. \u003cbr\u003e\nNun können Sie das Programm über die Datei namens „Java Web Scraper mit GUI.jar“ ausführen und benutzen.\n\n### Verwendung des Programms\nIm Programm können Sie aus einem Dropdown ein oder mehrere Suchwörter, zu welchen Sie Informationen benötigen, auswählen. \u003cbr\u003e\nMehrere Suchwörter können durch die Nutzung der Steuerungs- oder Umschalttaste ausgewählt werden. \u003cbr\u003e\nDurch den Knopf „Abrufen“ werden die Informationen zu den davor ausgewählten Suchwörtern abgerufen, formatiert und entsprechend im Bereich „Daten“ angezeigt. \u003cbr\u003e\nEs gibt zudem ein Textfeld, in welchem Sie Schlagwörter eingeben können, um so schnell, durch das Betätigen des „Suchen“-Knopfes, zu den entsprechenden Informationen zu gelangen. \u003cbr\u003e\nZudem wird im Programm nach dem Abrufen der Daten angezeigt, wie lange dies gedauert hat. \u003cbr\u003e\nAußerdem wird der Datenabruf durch eine Fortschrittsanzeige begleitet. \u003cbr\u003e\nDie abgerufenen Daten können anschließend zu JSON-Dateien exportiert und im „jwsg_export“-Ordner betrachtet werden. \u003cbr\u003e\nUm die Leistung des Programms zu verbessern, wird Caching benutzt, um Daten, welche zuvor abgerufen wurden, innerhalb einer Stunde schnell wiederzuerhalten. \u003cbr\u003e\nDie Cache-Dateien befinden sich im „jwsg_cache“-Ordner.\n\n### Leistung\nDas Programm benötigt etwa 30 Sekunden, um über 100 Anfragen zu verarbeiten. \u003cbr\u003e\nWenn alle Daten im Cache gespeichert sind, dauert das Laden der Daten ungefähr 50 Millisekunden. \u003cbr\u003e\nFolgende Faktoren beeinflussen die Leistung:\n- Das eigene Netzwerk\n- Die Auslastung des Servers\n- Die Hardware des eigenen Endgeräts (vernachlässigbar)\n\nDas Programm arbeitet effizient und erfordert daher keine leistungsstarke Hardware, wobei eine gute Netzanbindung von Vorteil ist. \u003cbr\u003e\nBeim Abrufen aller Daten wurden lediglich 300 MB RAM verwendet, während die Auslastung anderer Hardwarekomponenten (CPU/GPU/Speicher/ …) nicht messbar war.\n\n### Beispiele\nDie grafische Benutzeroberfläche:\n![GUI](https://github.com/user-attachments/assets/bf4afb65-724c-49f0-b71f-0d068e18cc58 \"GUI\") \u003cbr\u003e\nAuswählen von Suchwörtern:\n![Suchwortauswahl](https://github.com/user-attachments/assets/5ce48d6b-04b3-4487-a0c5-9dceb9c5848b \"Suchwortauswahl\") \u003cbr\u003e\nDie abgerufenen Daten:\n![Daten](https://github.com/user-attachments/assets/b9a46843-80f3-42ad-9f25-62b69be827bc \"Daten\")\n\n## Entwicklerdokumentation\n### Informationen zum Java-Projekt\nDieses Java-Projekt wurde mithilfe der [Eclipse IDE](https://eclipseide.org/) mit der Version „2024-12“ erstellt. \u003cbr\u003e\nZudem war die [Java JDK](https://www.oracle.com/java/technologies/downloads/) mit der Version „22.0.2“ im Einsatz. \u003cbr\u003e\nDazu wurde eine Drittanbieterbibliothek namens [jsoup](https://jsoup.org/download) mit der Version „1.18.3“ verwendet, um verschiedene HTML-Operationen durchzuführen. \u003cbr\u003e\nEs wurde [Eclipse WindowBuilder](https://projects.eclipse.org/projects/tools.windowbuilder) genutzt, um die grafische Oberfläche zu realisieren. \u003cbr\u003e\nAufgrund von Geschwindigkeitsverbesserungen wird das Abrufen von Informationen mithilfe von „Java Parallel Streams“ umgesetzt und für die weitere Reaktionsfähigkeit der grafischen Oberfläche wurde „SwingWorker“ genutzt. \u003cbr\u003e\nDas Java-Projekt wurde mit der Compiler-Konformitätsstufe „22“ kompiliert.\n\n### Struktur des Projekts\nDer Ordner namens „rsc“ beinhaltet das Icon des Programms, welches „Icon.png“ bezeichnet wird. \u003cbr\u003e\nWobei der Ordner mit der Bezeichnung „src“ die jsoup-Bibliothek mit der Nennung „jsoup-1.18.3.jar“ und das Paket namens „jwsg“ beinhaltet. \u003cbr\u003e\nIm Paket „jwsg“ befindet sich die Datei mit dem Namen „JWSGLayout.java“, welche die grafische Oberfläche beherbergt. \u003cbr\u003e\nDie Datei namens „JWSGLogic.java“ ist für die Logik zuständig. \u003cbr\u003e\nZudem existiert noch die Datei namens „JWSGScrapingConfig.java“, welche die für das Scrapen benötigten URLs, Suchwörter und Webseitenelemente enthält. (Diese können bei Bedarf angepasst werden.)\n\n### Einrichtung des Projekts\nSie können das Projekt durch die Befolgung der [Installationsanleitung](#Installation-des-Programms) herunterladen oder durch das [Klonen](https://docs.github.com/en/repositories/creating-and-managing-repositories/cloning-a-repository) des Projekts in Eclipse einbinden. \u003cbr\u003e\nBeachten Sie zuvor die [Informationen zum Java-Projekt](#Installation-des-Programms). \u003cbr\u003e\nAnschließend können Sie in Eclipse das Projekt importieren beziehungsweise öffnen. \u003cbr\u003e\nEs werden zuerst Fehler angezeigt, da Eclipse zusätzliche Projektinformationen benötigt. \u003cbr\u003e\nDiese können durch das Ergänzen der folgenden zwei Dateien behoben werden: \u003cbr\u003e\n- „.project“-Datei mit folgendem Inhalt im Hauptverzeichnis des Projekts anlegen: \u003cbr\u003e\n```\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cprojectDescription\u003e\n\t\u003cname\u003eJava Web Scraper mit GUI\u003c/name\u003e\n\t\u003ccomment\u003e\u003c/comment\u003e\n\t\u003cprojects\u003e\n\t\u003c/projects\u003e\n\t\u003cbuildSpec\u003e\n\t\t\u003cbuildCommand\u003e\n\t\t\t\u003cname\u003eorg.eclipse.jdt.core.javabuilder\u003c/name\u003e\n\t\t\t\u003carguments\u003e\n\t\t\t\u003c/arguments\u003e\n\t\t\u003c/buildCommand\u003e\n\t\u003c/buildSpec\u003e\n\t\u003cnatures\u003e\n\t\t\u003cnature\u003eorg.eclipse.jdt.core.javanature\u003c/nature\u003e\n\t\u003c/natures\u003e\n\u003c/projectDescription\u003e\n```\n- „.classpath“-Datei mit folgendem Inhalt im Hauptverzeichnis des Projekts anlegen: \u003cbr\u003e\n```\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003cclasspath\u003e\n\t\u003cclasspathentry kind=\"con\" path=\"org.eclipse.jdt.launching.JRE_CONTAINER\"\u003e\n\t\t\u003cattributes\u003e\n\t\t\t\u003cattribute name=\"module\" value=\"true\"/\u003e\n\t\t\u003c/attributes\u003e\n\t\u003c/classpathentry\u003e\n\t\u003cclasspathentry excluding=\"module-info.java\" kind=\"src\" path=\"src\"/\u003e\n\t\u003cclasspathentry kind=\"src\" path=\"rsc\"/\u003e\n\t\u003cclasspathentry kind=\"lib\" path=\"src/jsoup-1.18.3.jar\"/\u003e\n\t\u003cclasspathentry kind=\"output\" path=\"bin\"/\u003e\n\u003c/classpath\u003e\n```\nDaraufhin sollte das Java-Projekt nun ordnungsgemäß eingerichtet sein. \u003cbr\u003e\nFalls Sie eine andere IDE wie zum Beispiel die [IntelliJ IDEA](https://www.jetbrains.com/de-de/idea/) verwenden sollten, könnte die Einrichtung leicht variieren.\n\n### Codedokumentation\n\u003cdetails\u003e\n\u003csummary\u003epublic Methoden\u003c/summary\u003e\n\nPaket: jwsg \u003cbr\u003e\nDatei: JWSGLayout.java\n\n```java\n/**\n * Start der Anwendung. Erzeugt das Fenster und ansonsten erscheint ein Fehler.\n */\npublic static void main(String[] args)\n\n/**\n * Standardkonstruktur. Inititialisierung der Anwendung, um die GUI zu\n * erstellen.\n */\npublic JWSGLayout()\n\n/**\n * Gescrapte Daten werden formatiert und in einer JTextArea angezeigt.\n * \n * @param selectedCategories Die Liste der ausgewählten Kategorien.\n * @param scrapedData        Die gescrapten Daten.\n */\npublic void initData(List\u003cString\u003e selectedCategories, Map\u003cString, List\u003cString\u003e\u003e scrapedData)\n\n/**\n * Hervorheben des spezifischen Ergebnisses im Text.\n * \n * @param result      Das spezifische Ergebnis im Text.\n * @param resultIndex Der Index des spezifischen Ergebnisses im Text.\n */\npublic static void highlightResult(String result, int resultIndex)\n\n/**\n * Diese Methode setzt den Fortschrittsbalken zurück.\n */\npublic static void resetProgressBar()\n\n/**\n * Diese Methode setzt den Fortschrittsbalken auf sichtbar oder unsichtbar.\n * \n * @param visible Der Wert, ob der Fortschrittsbalken sichtbar oder unsichtbar\n *                ist.\n */\npublic static void setProgressBarVisible(boolean visible)\n\n/**\n * Diese Methode aktualisiert den Fortschrittsbalken.\n * \n * @param progress Der Wert, um den der Fortschrittsbalken aktualisiert wird.\n */\npublic static void updateProgressBar(int progress)\n\n/**\n * Diese Methode setzt die Status der interaktiven Komponenten.\n * \n * @param status Der Wert, ob die interaktiven Komponenten aktiviert oder\n *               deaktiviert sind.\n */\npublic static void setStatusInteractiveComponents(boolean status)\n```\n\nPaket: jwsg \u003cbr\u003e\nDatei: JWSGLogic.java\n\n```java\n/**\n * Diese Methode wird verwendet, um die Daten zu erhalten, die von den\n * ausgewählten Suchwörtern abhängen.\n * \n * @return Die Map, die die Suchwörter und die zugehörigen Daten enthält.\n */\npublic static Map\u003cString, List\u003cString\u003e\u003e getScrapedDataMap()\n\n/**\n * Diese Methode wird verwendet, um die Verarbeitungsdauer für das Scrapen zu\n * erhalten.\n * \n * @return Die Verarbeitungsdauer für das Scrapen.\n */\npublic static long getDuration()\n\n/**\n * Diese Methode wird verwendet, um eine Dialogbox mit dem entsprechenden Titel,\n * dem passenden Text und dem dazugehörigen Typ asynchron anzuzeigen, um den\n * Thread nicht zu blockieren.\n * \n * @param message     Der Text, der in der Dialogbox angezeigt werden soll.\n * @param title       Der Titel der Dialogbox.\n * @param messageType Der Typ der Dialogbox.\n */\npublic static void showDialog(String message, String title, int messageType)\n\n/**\n * Diese Methode wird verwendet, um die Suche nach einem bestimmten Suchbegriff\n * in den gescrapten Daten zu starten.\n * \n * @param keyword Der Suchbegriff, nach dem gesucht werden soll.\n */\npublic static void search(String keyword)\n\n/**\n * Diese Methode wird verwendet, um das nächste Suchergebnis anzuzeigen.\n */\npublic static void showNextResult()\n\n/**\n * Diese Methode wird verwendet, um die Daten in einer JSON-Datei alphabetisch\n * sortiert zu speichern.\n * \n * @param scrapedData Die Map, die die Suchwörter und die zugehörigen Daten\n *                    enthält.\n */\npublic static void exportData(Map\u003cString, List\u003cString\u003e\u003e scrapedData)\n\n/**\n * Diese Methode wird verwendet, um zu überprüfen, ob die Schaltfläche \"Abrufen\"\n * gedrückt wurde. Zudem werden die letzten ausgewählten Suchwörter gespeichert.\n * Enthält verschiedene Überprüfungen, um Sonderfälle abzudecken.\n * \n * @param list Die Liste der ausgewählten Suchwörter.\n * @return true, wenn die Schaltfläche gedrückt wurde und keiner der Sonderfälle\n *         aufgetreten ist, sonst false.\n */\npublic static boolean checkButtonPressed(List\u003cString\u003e list)\n```\n\nPaket: jwsg \u003cbr\u003e\nDatei: JWSGScrapingConfig.java\n\n```java\n/**\n * Diese Methode wird verwendet, um den Typ für das angegebene Suchwort aus\n * einer Map abzurufen.\n * \n * @param keyword Das Suchwort, für das der Typ abgerufen werden soll.\n * @return Der Typ für das angegebene Suchwort.\n */\npublic static String getType(String keyword)\n\n/**\n * Diese Methode wird verwendet, um die URL für das angegebene Suchwort aus\n * einer Map abzurufen.\n * \n * @param keyword Das Suchwort, für das die URL abgerufen werden soll.\n * @return Die URL für das angegebene Suchwort.\n */\npublic static String getUrl(String keyword)\n\n/**\n * Diese Methode wird verwendet, um die Elementklasse für das angegebene\n * Suchwort aus einer Map abzurufen.\n * \n * @param keyword Das Suchwort, für das die Elementklasse abgerufen werden soll.\n * @return Die Elementklasse für das angegebene Suchwort.\n */\npublic static String getElementClass(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Container für das angegebene Suchwort\n * aus einer Map abzurufen.\n * \n * @param keyword Das Suchwort, für das der Container abgerufen werden soll.\n * @return Der Container für das angegebene Suchwort.\n */\npublic static String getContainer(String keyword)\n\n/**\n * Diese Methode wird verwendet, um die ID für das angegebene Suchwort aus einer\n * Map abzurufen.\n * \n * @param keyword Das Suchwort, für das die ID abgerufen werden soll.\n * @return Die ID für das angegebene Suchwort.\n */\npublic static String getId(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Tag für das angegebene Suchwort aus\n * einer Map abzurufen.\n * \n * @param keyword Das Suchwort, für das der Tag abgerufen werden soll.\n * @return Der Tag für das angegebene Suchwort.\n */\npublic static String getTag(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Selektor für spezifische Links für das\n * angegebene Suchwort aus einer Map abzurufen.\n * \n * @param keyword Das Suchwort, für das der Selektor abgerufen werden soll.\n * @return Der Selektor für spezifische Links für das angegebene Suchwort.\n */\npublic static String getSelector(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Schwarzes Brett Titel Selektor für\n * spezifische Links für das angegebene Suchwort aus einer Map abzurufen.\n *\n * @param keyword Das Suchwort, für das der Selektor abgerufen werden soll.\n * @return Der Selektor für spezifische Links für das angegebene Suchwort.\n */\npublic static String getBulletinBoardTitleSelector(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Schwarzes Brett Datum Selektor für\n * spezifische Links für das angegebene Suchwort aus einer Map abzurufen.\n *\n * @param keyword Das Suchwort, für das der Selektor abgerufen werden soll.\n * @return Der Selektor für spezifische Links für das angegebene Suchwort.\n */\npublic static String getBulletinBoardDateSelector(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Schwarzes Brett Inhalt Selektor für\n * spezifische Links für das angegebene Suchwort aus einer Map abzurufen.\n *\n * @param keyword Das Suchwort, für das der Selektor abgerufen werden soll.\n * @return Der Selektor für spezifische Links für das angegebene Suchwort.\n */\npublic static String getBulletinBoardContentSelector(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Schwarzes Brett Unterinhalt Selektor für\n * spezifische Links für das angegebene Suchwort aus einer Map abzurufen.\n *\n * @param keyword Das Suchwort, für das der Selektor abgerufen werden soll.\n * @return Der Selektor für spezifische Links für das angegebene Suchwort.\n */\npublic static String getBulletinBoardSubcontentSelector(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Personennamen Selektor für spezifische\n * Links für das angegebene Suchwort aus einer Map abzurufen.\n *\n * @param keyword Das Suchwort, für das der Selektor abgerufen werden soll.\n * @return Der Selektor für spezifische Links für das angegebene Suchwort.\n */\npublic static String getPersonNameSelector(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Personengruppen Selektor für spezifische\n * Links für das angegebene Suchwort aus einer Map abzurufen.\n * \n * @param keyword Das Suchwort, für das der Selektor abgerufen werden soll.\n * @return Der Selektor für spezifische Links für das angegebene Suchwort.\n */\npublic static String getPersonGroupSelector(String keyword)\n\n/**\n * Diese Methode wird verwendet, um den Personenemail Selektor für spezifische\n * Links für das angegebene Suchwort aus einer Map abzurufen.\n * \n * @param keyword Das Suchwort, für das der Selektor abgerufen werden soll.\n * @return Der Selektor für spezifische Links für das angegebene Suchwort.\n */\npublic static String getPersonEmailSelector(String keyword)\n\n/**\n * Diese Methode wird verwendet, um die gesamte Map mit Suchwörtern und URLs zu\n * erhalten.\n * \n * @return Die gesamte Map mit Suchwörtern und URLs.\n */\npublic static Map\u003cString, String\u003e getKeywordUrlMap()\n\n/**\n * Diese Methode wird verwendet, um die Elementklasse für Studiengänge zu\n * erhalten.\n * \n * @return Die Elementklasse für Studiengänge.\n */\npublic static String getProgramElementClass()\n\n/**\n * Diese Methode wird verwendet, um die Elementklasse für Semestertermine zu erhalten.\n * \n * @return Die Elementklasse für Semestertermine.\n */\npublic static String getDateElementClass()\n\n/**\n * Diese Methode wird verwendet, um die Elementklasse für Schwarze Bretter zu\n * erhalten.\n * \n * @return Die Elementklasse für Schwarze Bretter.\n */\npublic static String getBulletinBoardElementClass()\n\n/**\n * Diese Methode wird verwendet, um die Elementklasse für Personen zu erhalten.\n * \n * @return Die Elementklasse für Personen.\n */\npublic static String getPersonElementClass()\n\n/**\n * Diese Methode wird verwendet, um den Typ für Schwarze Bretter zu erhalten.\n * \n * @return Der Typ für Schwarze Bretter.\n */\npublic static String getBulletinBoardType()\n\n/**\n * Diese Methode wird verwendet, um den Typ für Personen zu erhalten.\n * \n * @return Der Typ für Personen.\n */\npublic static String getPersonType()\n\n/**\n * Diese Methode wird verwendet, um den Pagination Token für Personen zu\n * erhalten.\n * \n * @return Der Pagination Token für Personen.\n */\npublic static String getPersonPaginationToken()\n\n/**\n * Diese Methode wird verwendet, um das Format für die Pagination für Personen\n * zu erhalten.\n * \n * @return Das Format für die Pagination für Personen.\n */\npublic static String getPersonPaginationFormat()\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eprivate Methoden\u003c/summary\u003e\n\nPaket: jwsg \u003cbr\u003e\nDatei: JWSGLayout.java\n\n```java\n/**\n * GUI-Inhalte vom Frame werden initialisiert und das Fenster wird nach dem OS\n * angepasst, ansonsten wird ein Fehler ausgegeben.\n */\nprivate void initialize()\n\n/**\n * JList wird mit den vordefinierten Suchwörtern alphabetisch sortiert\n * initialisiert.\n * \n * @return DefaultListModel\u003cString\u003e welche die Liste mit den initialen\n *         alphabetisch sortierten Inhalten enthält.\n */\nprivate DefaultListModel\u003cString\u003e initList()\n\n/**\n * Durchführung der Suche nach einem Suchbegriff.\n */\nprivate void performSearch()\n```\n\nPaket: jwsg \u003cbr\u003e\nDatei: JWSGLogic.java\n\n```java\t\n/**\n * Diese Methode wird verwendet, um die Daten von den ausgewählten Suchwörtern\n * mit ihren entsprechenden URLs parallel abzurufen und in einer Map zu\n * speichern. Verzögerung für Anfragen, Cache, Fortschrittsbalken und\n * SwingWorker werden verwendet.\n *\n * @param categories Die Liste der ausgewählten Suchwörter.\n */\nprivate static void scrapData(List\u003cString\u003e categories)\n\n/**\n * Diese Methode wird verwendet, um die Daten der Studiengänge zu extrahieren\n * und zu verarbeiten.\n * \n * @param website      Die Webseite, von der die Daten extrahiert werden sollen.\n * @param category     Die Kategorie des Suchworts (Studiengänge).\n * @param elementClass Die Klasse der Elemente, die die Daten enthalten.\n * @param linkSelector Der Selektor für spezifische Links innerhalb der\n *                     Elemente.\n * @return Die Liste, die die extrahierten Daten enthält.\n */\nprivate static List\u003cString\u003e processProgramData(Document website, String category, String elementClass, String linkSelector)\n\n/**\n * Diese Methode wird verwendet, um die Daten der Semestertermine zu extrahieren\n * und zu verarbeiten.\n * \n * @param website      Die Webseite, von der die Daten extrahiert werden sollen.\n * @param category     Die Kategorie des Suchworts (Semestertermine).\n * @param elementClass Die Klasse der Elemente, die die Daten enthalten.\n * @param container    Der Container für die jeweiligen Suchwörter.\n * @param id           Die ID für die jeweiligen Suchwörter.\n * @param tag          Der Tag für die jeweiligen Suchwörter\n * @return Die Liste, die die extrahierten Daten enthält.\n */\nprivate static List\u003cString\u003e processDateData(Document website, String category, String elementClass, String container, String id, String tag)\n\n/**\n * Diese Methode wird verwendet, um die Daten der Schwarzen Bretter zu\n * extrahieren und zu verarbeiten.\n * \n * @param website            Die Webseite, von der die Daten extrahiert werden\n *                           sollen.\n * @param category           Die Kategorie des Suchworts (Schwarze Bretter).\n * @param elementClass       Die Klasse der Elemente, die die Daten enthalten.\n * @param titleSelector      Der Selektor für die Titel der Schwarzen Bretter.\n * @param dateSelector       Der Selektor für die Daten der Schwarzen Bretter.\n * @param contentSelector    Der Selektor für den Inhalt der Schwarzen Bretter.\n * @param subcontentSelector Der Selektor für den Unterinhalt der Schwarzen\n *                           Bretter.\n * @return Die Liste, die die extrahierten Daten enthält.\n */\nprivate static List\u003cString\u003e processBulletinBoardData(Document website, String category, String elementClass, String titleSelector, String dateSelector, String contentSelector, String subcontentSelector)\n\n/**\n * Diese Methode wird verwendet, um die Daten der Personen zu extrahieren und zu\n * verarbeiten.\n * \n * @param website       Die Webseite, von der die Daten extrahiert werden\n *                      sollen.\n * @param category      Die Kategorie des Suchworts (Personen).\n * @param elementClass  Die Klasse der Elemente, die die Daten enthalten.\n * @param tag           Der Tag für die jeweiligen Suchwörter\n * @param nameSelector  Der Selektor für die Namen der Personen.\n * @param groupSelector Der Selektor für die Gruppen der Personen.\n * @param emailSelector Der Selektor für die E-Mail-Adressen der Personen.\n * @return Die Liste, die die extrahierten Daten enthält.\n */\nprivate static List\u003cString\u003e processPersonData(Document website, String category, String elementClass, String tag, String nameSelector, String groupSelector, String emailSelector)\n\n/**\n * Diese Methode wird verwendet, um den Dateinamen für den Cache zu erstellen.\n * \n * @param category Das Suchwort, für das der Cache erstellt werden soll.\n * @return Der Dateiname für den Cache.\n */\nprivate static String getCacheFileName(String category)\n\n/**\n * Diese Methode wird verwendet, um zu überprüfen, ob der Cache gültig ist.\n * \n * @param cacheFileName       Der Dateiname des Caches.\n * @param cacheDurationMillis Die Dauer des Caches in Millisekunden.\n * @return true, wenn der Cache gültig ist, sonst false.\n */\nprivate static boolean isCacheValid(String cacheFileName, long cacheDurationMillis)\n\n/**\n * Diese Methode wird verwendet, um die Daten in den Cache zu speichern.\n * \n * @param cacheFileName Der Dateiname des Caches.\n * @param data          Die Daten, die in den Cache gespeichert werden sollen.\n */\nprivate static void saveToCache(String cacheFileName, List\u003cString\u003e data)\n\n/**\n * Diese Methode wird verwendet, um die Daten aus dem Cache zu laden.\n * \n * @param cacheFileName Der Dateiname des Caches.\n * @return Die Daten, die aus dem Cache geladen wurden.\n */\nprivate static List\u003cString\u003e loadFromCache(String cacheFileName)\n```\n\u003c/details\u003e\n\n## Drittanbieterinformationen\n```\njsoup License\nThe jsoup code-base (including source and compiled packages) are distributed under the open source MIT license as described below.\n\nThe MIT License\nCopyright © 2009 - 2025 Jonathan Hedley (https://jsoup.org/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n```\n\n© 2024-2025 mexikoedi \n\nAlle Rechte vorbehalten.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmexikoedi%2Fjava-web-scraper-mit-gui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmexikoedi%2Fjava-web-scraper-mit-gui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmexikoedi%2Fjava-web-scraper-mit-gui/lists"}