Seite 1 von 1

Relative Links in absolute Links umwandeln? :(

Verfasst: Donnerstag 7. Dezember 2006, 22:06
von mc_mak
Hallo zusammen,

gibt es eine Möglichkeit, eine per urlopen eingelesene Webseite so zu verändern, dass die enthaltenen Verweise nicht mehr relativ, sondern absolut sind. Die Problemstellung ist also so, dass man einen string hat, der den Quellcode der Webseite enthält. Dann benötige ich ein entsprechendes Python-Skript, das die die relativen Links erkennt und durch absolute ersetzt. Die Variante mit BeautifulSoup, jeden Link zu ersetzen, dauert bei umfangreicheren Seiten extrem lange. Schön wäre eine alternative Lösung, bei der die Performance besser wäre, aber ich fürchte, das wird wohl so gar nicht möglich sein. Falls doch bin ich für alle Tipps dankbar.

Viele Grüße,

Makmak

Re: Relative Links in absolute Links umwandeln? :(

Verfasst: Donnerstag 7. Dezember 2006, 22:18
von gerold
Hi Makmak!

Ich glaube, *HTTrack* kann so etwas. Allerdings ist das kein Python-Programm.

http://www.httrack.com/

Dann gibt es noch *httrack-py* http://www.satzbau-gmbh.de/staff/abel/httrack-py/

mfg
Gerold
:-)

Verfasst: Freitag 8. Dezember 2006, 10:33
von mitsuhiko
Nicht getestet, sollte aber seinen Zweck erfüllen:

Code: Alles auswählen

import re
import urlparse

tag_re = re.compile(r'(<[a-zA-Z:]+\s+(?:src|href)=)(["\']?)(.*?)\2(>)(?uism)')

def make_absolute(html, root_url):
    def handle_match(m):
        url = urlparse.urljoin(root_url, m.group(3))
        g = m.group
        return type(html)('').join((g(1), g(2), url, g(2), g(4)))
    return tag_re.sub(handle_match, html)
Verwendung etwa so:

Code: Alles auswählen

make_absolute(html, 'http://www.example.com/this_location/')