Cómo corregir los enlaces relativos rotos en páginas web fuera de línea?
-
26-09-2019 - |
Pregunta
Me escribió un simple script en Python para descargar una página web para verlas sin conexión. El problema es que los vínculos relativos se rompen. Por lo que el archivo sin conexión "c: \ temp \ webpage.html" tiene a href = "index.aspx", pero cuando se abre en un navegador se resuelve a "file: /// C: /temp/index.aspx" en lugar de " http://myorginalwebsite.com/index.aspx ".
Así que imaginar que tendría que modificar mi script para solucionar cada uno de los enlaces relativos para que apunte a la página original. hay una manera mas facil? Si no es así, alguien tiene algún código Python muestra que se puede hacer esto? Soy un novato Python así será apreciado ningún punteros.
Gracias.
Solución
Si sólo desea que sus enlaces relativos a refieren a la página web, sólo tiene que añadir una etiqueta de base en la cabeza:
<base href="http://myoriginalwebsite.com/" />
Otros consejos
lxml hace que este braindead simple!
>>> import lxml.html, urllib
>>> url = 'http://www.google.com/'
>>> e = lxml.html.parse(urllib.urlopen(url))
>>> e.xpath('//a/@href')[-4:]
['/intl/en/ads/', '/services/', '/intl/en/about.html', '/intl/en/privacy.html']
>>> e.getroot().make_links_absolute()
>>> e.xpath('//a/@href')[-4:]
['http://www.google.com/intl/en/ads/', 'http://www.google.com/services/', 'http://www.google.com/intl/en/about.html', 'http://www.google.com/intl/en/privacy.html']
A partir de ahí se puede escribir el DOM a cabo en el disco como un archivo.
Así que desea comprobar todos los enlaces que comienzan con http://
pero que no lo hicieron desea anexar http://myoriginalwebsite.com
al frente de la cadena, y la prueba de conexión?
Suena bastante fácil. ¿O es el código Python adecuado que estés teniendo problemas con?