Hyperlink aus E-Mail extrahieren

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
Hawkeye
User
Beiträge: 5
Registriert: Donnerstag 26. März 2009, 16:32

Donnerstag 26. März 2009, 16:44

Hallo zusammen,

ich versuche verzweifelt einen Hyperlink aus einer E-Mail herauszubekommen. In dem Hyperlink soll das Schlüsselwort "inbox" vorkommen. Bisher habe ich folgendes getan:

Code: Alles auswählen

import poplib
import email
import re
import string

for i in xrange(1, pop.stat()[0]+1):
        for zeile in pop.retr(i)[1]:
            if zeile.startswith("Subject"):
                subject = zeile
            msg = msg + "\n" + zeile
       
        ident_message = re.findall(r"http://www.*", msg)
            for i in range(0, len(ident_message)):
                if re.search(r"inbox", ident_message[i]):
                    Url = ident_message[i]
                    print "Das ist eine URL: "
                    print Url
Die URL besteht aus (anonymisiert)
http://www.xyz.com/x/?inbox/getmessage. ... ref=123456

Das Problem dabei ist das folgende: Aus irgendeinem Grund werden alle Zahlen ab "t=" durch falsche ersetzt. Kann es sein, dass in dem Hyperlink irgendwelche Steuerzeichen sind, die dann so umgesetzt werden? Wie kann ich das umgehen?

Ich benutze Python 2.4

Im Voraus schon mal vielen Dank an alle :)
BlackJack

Donnerstag 26. März 2009, 16:58

@Hawkeye: Bei dem gezeigten Quelltext wird nichts ersetzt. Wenn in der URL "falsche" Zahlen stehen, dann stehen die auch so in der Mail.

Für die Suche nach der Teilzeichenkette 'inbox' sind reguläre Ausdrücke mit Kanonen auf Spatzen geschossen, das kann man auch einfach mit dem ``in``-Operator überprüfen oder gleich in den ersten regulären Ausdruck einbauen.

Die innere Schleife sollte gleich über die Elemente von `ident_message` laufen, ohne den dann überflüssigen Index `i`. Der übrigens auch Verwirrung beim Lesen stiftet, weil der Name `i` in beiden Schleifen verwendet wird.
Hawkeye
User
Beiträge: 5
Registriert: Donnerstag 26. März 2009, 16:32

Donnerstag 26. März 2009, 17:22

Mal abgesehen davon, dass mein Code nicht optimiert ist, so sollte er doch eigentlich die Mail unverändert abrufen. Trotzdem weicht die URL in der E-Mail von der extrahierten ab.
Ich kann mir das nicht erklären...die einzige Idee, die ich habe ist, dass die URL "versteckte" Zeichen hat, warum auch immer....
Gibt es denn vllt. ein Modul, mit dem man explizit Hyperlinks suchen und auslesen kann?
BlackJack

Donnerstag 26. März 2009, 17:45

@Hawkeye: An versteckte Zeichen glaube ich nicht. Du kannst die `Url` ja mal mit `repr()` ausgeben. Was Du da siehst, ist definitiv in der Mail enthalten.
Hawkeye
User
Beiträge: 5
Registriert: Donnerstag 26. März 2009, 16:32

Donnerstag 26. März 2009, 19:39

Endlich habe ich den Fehler gefunden...statt des "=" wurde "3D=" geschrieben. Das ist der Ascii-Hexcode für "=".... :roll:

Danke für deine Mühe. :)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Donnerstag 26. März 2009, 19:48

Wie wäre es mit

Code: Alles auswählen

re.findall("http://www.xyz.com/[a-z]+/?inbox/getmessage.php&t=[\d]+&aref=[\d]+", deintext)
Edit: Merke grade, dass das nicht klappt. Warum auch immer...
Zuletzt geändert von Dauerbaustelle am Donnerstag 26. März 2009, 19:50, insgesamt 1-mal geändert.
BlackJack

Donnerstag 26. März 2009, 19:48

Du meinst wohl '=3D'. Du solltest vielleicht etwas sauberer mit den Mails umgehen und die mit den entsprechenden Modulen bearbeiten. *Diese* Mail(s) scheinen als 'quoted printable' kodiert zu sein. Das muss aber nicht so sein.
Antworten