HTMLParser - Verständnisshilfe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Um eine Versionsnummer abzufragen? Muß man ein Passwort eingeben? Und bei DropBox nicht?
Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

@xXSkyWalkerXx1: du denkst viel zu kompliziert, was aber IMHO daran liegt, dass dir da (noch) alles mögliche Wissen fehlt, was Webprogrammierung angeht. Beschäftige dich doch mal ein wenig damit, wie so Request-Response Abläufe funktionieren und wie HTTP-basierte APIs (REST-APIs) aussehen. Hilft bei der Lösugsfindung.

Zweite Einschränkung: dein Hoster, der anscheinend alles mögliche limitiert bzw unterbindet. Wenn du so viel Kohle mit dem Verkauf von Cheats verdienst, dann kannst du dir doch sicherlich einen vollwertigen Server bzw. eine Server-Instanz irgendwo mieten / finanzieren. Wurde oben schon mal vorgeschlagen. Würde dich und dein "Business" deutlich flexibler machen.

Gruß, noisefloor
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Sirius3 hat geschrieben: Montag 1. Oktober 2018, 12:07 Um eine Versionsnummer abzufragen? Muß man ein Passwort eingeben? Und bei DropBox nicht?
Es wäre nicht nur die Versionsnummer - es wäre der ganze Skript, aber ja.
Und nein, bei Dropbox nicht...
von noisefloor » Montag 1. Oktober 2018, 12:49
Hallo,

@xXSkyWalkerXx1: du denkst viel zu kompliziert, was aber IMHO daran liegt, dass dir da (noch) alles mögliche Wissen fehlt, was Webprogrammierung angeht. Beschäftige dich doch mal ein wenig damit, wie so Request-Response Abläufe funktionieren und wie HTTP-basierte APIs (REST-APIs) aussehen. Hilft bei der Lösugsfindung.

Zweite Einschränkung: dein Hoster, der anscheinend alles mögliche limitiert bzw unterbindet. Wenn du so viel Kohle mit dem Verkauf von Cheats verdienst, dann kannst du dir doch sicherlich einen vollwertigen Server bzw. eine Server-Instanz irgendwo mieten / finanzieren. Wurde oben schon mal vorgeschlagen. Würde dich und dein "Business" deutlich flexibler machen.

Gruß, noisefloor
Danke für die Antwort...zu wissen worin ich mich genauer Informieren sollte ist auch sehr hilfreich! :)

Grüße, xXSkyWalkerXx1
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

PS an "interessante" Seiten auf deiner Website komme ich ohne Registrierung ran.

PPS Das ginge so prinzipiell auch:

Code: Alles auswählen

>>> from bs4 import BeautifulSoup
>>> import requests
>>> url = "https://skymodz.yooco.de/fortnite_gamepack"
>>> web = requests.get(url)
>>> soup = BeautifulSoup(web.text, "html5lib")
>>> span_items = soup.find_all("span")
>>> for span_item in span_items:
	if "FORTNITE GAMEPACK V" in span_item.text:
		print(span_item.text.split(" ")[-1])
		break

	
V1.5
Wenn Du ein gescheites ID- oder Class-Element für die Überschrift definieren würdest, dann wäre die Abfrage sehr viel einfacher und vor allem gegen Änderungen geschützter. Die aktuelle Lösung funktioniert nur solange Du an der Website nichts fundamental änderst...
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Was für Seiten würdest mit empfehlen um Webprogr. zu lernen?
Wie ist diese: http://docs.python-requests.org/de/late ... start.html ?
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Das ist noch keine Webprogrammierung, das ist Web-Scraping und ja, das Modul requests würde ich empfehlen und nutzen.

Wenn du eine Software suchst, um Webseiten in Python zu programmieren, dann würde ich mir bottle.py (wenn es schnell gehen soll) oder flask (wenn du es gründlich und vernünftig machen willst) ansehen. Aus meiner Sicht brauchst du das aber nicht, um dein Problem zu lösen.

Mein Eindruck: Du setzt zu wenig von den Hinweisen hier um, dadurch wird der Thread sehr lang und gefühlt kommt man nicht von der Stelle.

Konkret, z. B.:
* Definiere doch mal auf der Seite - die du nutzt - die Überschrift vernünftig (<h1 id="...">...</h1> statt <span ...>...</span>) und dann kannst du das auch vernünftig parsen.
* Entscheide dich dann da zu bleiben oder auf einen der vielen Lösungsansätze hier aus dem Thread zurückzugreifen.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Danke für die Info! :)

Zu deinem Eindruck: naja, was Python angeht bin ich vom Status fortgeschrittener - wobei sich das schwer an einer Programmiersprache definieren lässt. In letzter Zeit habe ich mich, wenn ich an meinem Projekt gearbeitet habe, sehr intensiv mit PyQt5, also dem (G)UI designen befasst.
Allerdings besitze ich grundlegende Kenntnisse in Python und etwas darüber.

Was dein(e) konkretes Beispiel angeht:
Die Idee hatte ich auch. Weiß nur noch nicht, ob's möglich ist - werde es dann Mal probieren. :)
Habe auch die Idee, die Version und den Skript via HTML-Editor auf der Seite in die HTML zu packen, vllt als Kommentar? Aber ich bin mir nicht sicher, ob dessen Inhalt auch andere sehen können? (Wenn es passwortungeschützt ist)
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

Vielleicht mache ich einen Gedankenfehler, aber du willst im Netz eine Versionsnummer unterbringen und sagen, dass das die aktuell gültige und aktuellste Version ist? Warum sollte das geheim sein? Das könntest du m. E. auf der Seite unterbringen und z. B. in einem Text verpacken. Wenn du das in ein span-Element mit einer ID oder Klasse steckst, kannst du das m. E. leicht auslesen. (An den Stellen kann man dir nicht mehr so ganz folgen, weil man die Problematik, von der du sprichst, nicht mehr so einfach nachvollziehen kann - meine Meinung.)
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ich möchte die Versionsnummer auslesen lassen UND ,wenn neue Version vorhanden, den dazugehörigen Skript als bloßen String speichern lassen.
Jetzt klar? ...dabei schreibe ich doch eigentlich immer deutlich. :D
nezzcarth
User
Beiträge: 1632
Registriert: Samstag 16. April 2011, 12:47

xXSkyWalkerXx1 hat geschrieben: Sonntag 30. September 2018, 18:54 Warum ist das "mindestens" fragwürdig?
Das ist wohl eine rhetorische Frage. Es ist ja deine Sache, was du machst, aber sich ahnungslos zu stellen ist halt schon ein Bisschen lustig :P
Benutzeravatar
pixewakb
User
Beiträge: 1408
Registriert: Sonntag 24. April 2011, 19:43

xXSkyWalkerXx1 hat geschrieben: Montag 1. Oktober 2018, 16:38 Ich möchte die Versionsnummer auslesen lassen UND ,wenn neue Version vorhanden, den dazugehörigen Skript als bloßen String speichern lassen.
Jetzt klar? ...dabei schreibe ich doch eigentlich immer deutlich. :D
"den dazugehörigen Skript als bloßen String speichern" ist unverständlich.

Wenn das (s. Zitat) dein Problem ist, dann löst man das mit gefühlt 8 Zeilen Code. Dafür, dass wir mittlerweile auf der 3. Unterseite diskutieren, scheint Dein Problem recht überschaubar-einfach-klein.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Das sind so momentan die Funktionen, die ich zu "requests" notiert habe:

Funktionen für Webscraping: „import requests“
(.requests)

.get() Seite laden
.text Inhalt als Text ausgeben
.post(url,<params>) sendet Daten, params = dictionary
.status_code() Statuscode erhalten
.codes.ok Verbindung erfolgreich?
.(… , allow_redirects=True/False) Weiterleitung aktivieren?
.(… , timeout= <in sek> ) TimeOut nach...
.Session() Parameter bleiben bestehen
.(… , stream= True/False) Wenn „True“, dann wird Inhalt
erst gedownloadet, wenn
„.content“ aufgerufen wird
.(… , auth = {…}) Für Authentifizierungen

Gibts noch welche, die ich eurer Meinung nach hinzufügen sollte?

Schaue morgen weiter nach "BS4" Funktionen...
Aber vllt kann mir bis morgen jemand erklären, warum in

Code: Alles auswählen

print(span_item.text.split(" ")[-1])
bei .split "(" ")[-1]" steht? :)

Grüße,
xXSkyWalkerXx1
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

ich weiß nicht, wie Du am besten etwas lernst (ich, z.B. indem ich Dinge systematisch ausprobiere), aber ich glaube, die Dokumentation ohne Verstand falsch abzuschreiben, bringt niemanden weiter.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ich hatte anfangs zu jeder Funktions/etc. Stichpunkte gemacht, um so immer mal nachschauen zu können - aber warum falsch?
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

pixewakb hat geschrieben: Montag 1. Oktober 2018, 13:49 PS an "interessante" Seiten auf deiner Website komme ich ohne Registrierung ran.

PPS Das ginge so prinzipiell auch:

Code: Alles auswählen

>>> from bs4 import BeautifulSoup
>>> import requests
>>> url = "https://skymodz.yooco.de/fortnite_gamepack"
>>> web = requests.get(url)
>>> soup = BeautifulSoup(web.text, "html5lib")
>>> span_items = soup.find_all("span")
>>> for span_item in span_items:
	if "FORTNITE GAMEPACK V" in span_item.text:
		print(span_item.text.split(" ")[-1])
		break

	
V1.5
Wenn Du ein gescheites ID- oder Class-Element für die Überschrift definieren würdest, dann wäre die Abfrage sehr viel einfacher und vor allem gegen Änderungen geschützter. Die aktuelle Lösung funktioniert nur solange Du an der Website nichts fundamental änderst...
Oh mann! Ich bin soo dumm... :D Na klar, hab mir mal dein Bsp. genauer angeguckt und geguckt warum "[-1]" steht und nicht "[3]"...oar, jetzt hab ich's verstanden! :D
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Ich habe nun folgendes kleines Problem:
Der Login funktioniert, kann ich aus dem ausgegebenen Content entnehmen, allerdings weiß ich nicht, wie ich meinem Programm das wissen lassen kann?
Also das Programm soll erkennen, ob der Login erfolgreich war oder nicht.

Grüße,
xXSkyWalkerXx1
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Ich verstehe Dein Problem nicht. Wenn es im ausgegebenen Content steht, kann das doch auch Dein Programm rauslesen.
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

Jaa, dumme Frage eigentlich! :D Hab's lösen können... ^^
Im Content muss ja was mit "ausloggen" stehen, wenn man angemeldet ist und wenn das Programm diesen str im content ( str(content) ) gefunden hat, dann müsste man ja eingeloggt sein.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

Wobei diese Methode wiederum sehr fragil ist. Wie immer: HTML parsen, den genauen XPath herausfinden, wo der Logout-Link, oder das eingeloggt-Label steht und das auslesen.
Antworten