Ausschnitt aus Text finden

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.
Antworten
pythoneer
User
Beiträge: 5
Registriert: Samstag 9. Mai 2015, 21:50

Guten Tag,

ich möchte Daten von einer Website abgreifen (funktioniert bereits) und daraus bestimmte Textstücke finden um diese später via SQL in eine Datenbank zu schreiben.
Was ich jetzt nicht hinbekomme: Bestimmte Textstücke herrauszufiltern. Ich bin leider noch ein blutiger Anfänger.
(Als EAN kann man z.B.: 4300175129558 eingeben (Das ist eine Vollmilch)

Code: Alles auswählen

import urllib.request
x = input("Bitte EAN eingeben: ")

Website ="http://opengtindb.org/?ean=" + x + "&cmd=query&queryid=300000000" 
t = urllib.request.urlopen(Website)
print(t.read()) #Ausgabe des Websiten-Inhaltes (nur zur Kontrolle)

a = x.find("name")
b = x.find("detailname")
c = x[a+5:b]   #Das was in der Variable c steht soll später in die SQL Datenbank gespeichert werden.
print(c)          #Soll den Text der zwischen "name" und "deteilname" steht ausgeben (nur zu Kontrolle)
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@pythoneer: da die Antwort des Servers in einer bestimmten Struktur vorliegt, würde man ja zuerst diese Struktur in ein Wörterbuch umwandeln, um dann auf die Werte zugreifen zu können.
Z.B. so:

Code: Alles auswählen

data = dict(line.split('=', 1) for line in response.splitlines() if '=' in line)
Die eigentliche Frage an Dich ist aber: was steht in "x"?
pythoneer
User
Beiträge: 5
Registriert: Samstag 9. Mai 2015, 21:50

in "x" steht die jeweilige EAN nummer. (Also die Barcodenummer auf einem beliebigem Produkt)
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@pythoneer: und wie soll dann darin "name" vorkommen?
pythoneer
User
Beiträge: 5
Registriert: Samstag 9. Mai 2015, 21:50

Als Beispiel scanne ich eine Flasche Fassbrause mit der EAN nummmer 4002208017114 ein.
Dann ruft das Script die Website "http://opengtindb.org/?ean=400220801711 ... =300000000" auf in der folgender Text steht:
dort steht dann auch "name" drin.

Code: Alles auswählen

b'\nerror=0\n---\nasin=\nname=Erfrischungsgetr\xe4nk\ndetailname=Gaffels Fassbrause (Zitrone)\nvendor=Privatbrauerei Gaffel\nmaincat=Getr\xe4nke, Alkohol\nsubcat=Limonaden\nmaincatnum=11\nsubcatnum=7\ncontents=10\norigin=Deutschland\ndescr=\nname_en=\ndetailname_en=\ndescr_en=\nvalidated=100 %\n---\n'
Aus diesem Text möchte ich einzelne Infos herausziehen, wie z.B. wie das Produkt heißt und von dem das hergestellt wird. (Später sollen diese Daten in die SQL-Datenbank geschrieben werden.


Wenn ich das auf folgendem Wege nach "name" suche, dann findet er diesen an der falschen Position (-1) obwohl es ca. 20 sein müsste.
Woran könnte das liegen?

Code: Alles auswählen

import urllib.request
x = input("")
Website ="http://opengtindb.org/?ean=" + x + "&cmd=query&queryid=300000000" #
t = urllib.request.urlopen(Website)
h = str(t)
a = h.find("name")
print(a)
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@pythoneer: Du hast meine Frage nicht beantwortet, die Dir helfen soll, Deine Fehler zu finden: An welchen Stellen verwendest Du x und was steht dort jeweils in x?
pythoneer
User
Beiträge: 5
Registriert: Samstag 9. Mai 2015, 21:50

Sirius3 hat geschrieben:@pythoneer: Du hast meine Frage nicht beantwortet, die Dir helfen soll, Deine Fehler zu finden: An welchen Stellen verwendest Du x und was steht dort jeweils in x?
in "x" steht die jeweilige EAN nummer. (Also die Barcodenummer auf einem beliebigem Produkt)

Bsp.: "4002208017114" für Fassbrause

Also in "x" steht eine 13 stellige Zahl (die EAN-Nummer) die manuell, oder via Barcodescanner eingegeben wird.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@pythoneer: jetzt hast Du ja einen zweites Programm gepostest, wo Du ganz andere einbuchstabige Variablen benutzt. Als erstes solltest Du den Variablen sinnvolle Namen geben. Wenn Du einen guten Namen gewählt hast, hast Du schon das halbe Problem gelöst, weil zum finden eines guten Namens Du schon den Zweck der Variable festlegst. Dann ist Programmieren nicht raten, sondern das logische Lösen von Teilproblemen, wobei etliche Teilprobleme schon durch die Bibliotheken von Python gelöst sind. Also versuch zuerst das ganze Problem in Teile zu zerlegen und sie in Worten zu beschreiben, bevor Du anfängst, das in Code umzusetzen.
gerpark
User
Beiträge: 8
Registriert: Montag 19. Januar 2015, 20:58

Hallo pythoneer,
die Funktion 'find' hilft hier noch nicht besonders gut weiter.
Am einfachsten ist es, wenn Du die erhaltenen Daten
zeilenweise einliest und dann analysiert.
Also zuerst den erhaltenen String mit splitlines() zerlegen.
Danach zerlegst Du die einzelne Zeile mit split('=')
und kannst sie dann weiterverarbeiten. Am geschicktesten
ist es die Infos in einem Dictionary abzulegen.
Vielleicht probierst Du das ganze in Einzelschritten -
und Sirius hat Dir schon gezeigt, das so etwas mit
Python auch sehr kompakt möglich ist.
pythoneer
User
Beiträge: 5
Registriert: Samstag 9. Mai 2015, 21:50

schonaml vielen Dank dafür.
Ich werde es ausprobieren.
Antworten