urls una rutas ruta relativas relativa qué que ejercicios ejemplo archivo acceso absolutas absoluta python html url-parsing

python - rutas - Reconstrucción de las URL absolutas a partir de las URL relativas en una página



rutas relativas php (2)

Use urllib.parse.urljoin para resolver una URL (posiblemente relativa) contra una URL base.

Sin embargo , la URL base de una página web no es necesariamente la misma que la URL de la que obtuvo el documento, ya que HTML permite que una página especifique su URL base preferida a través del elemento BASE . La lógica que necesitas es la siguiente:

base_url = page_url head = document.getElementsByTagName(''head'')[0] for base in head.getElementsByTagName(''base''): if base.hasAttribute(''href''): base_url = urllib.parse.urljoin(base_url, base.getAttribute(''href'')) # HTML5 4.2.3 "if there are multiple base elements with href # attributes, all but the first are ignored." break

(Si estás analizando XHTML, en teoría deberías tener en cuenta la especificación XML Base, que es bastante peluda. Pero probablemente puedas escapar sin preocuparte por eso, ya que nadie realmente usa XHTML).

Dada una url absoluta de una página y un enlace relativo encontrado dentro de esa página, ¿habría una manera de a ) reconstruir definitivamente o b) reconstruir con el mejor esfuerzo la url absoluta del enlace relativo?

En mi caso, estoy leyendo un archivo html de una url determinada usando una sopa hermosa, eliminando todas las fuentes de etiquetas img y tratando de construir una lista de urls absolutas para las imágenes de la página.

Mi función de Python hasta ahora se parece a:

function get_image_url(page_url,image_src): from urlparse import urlparse # parsed = urlparse(''http://user:pass@NetLoc:80/path;parameters?query=argument#fragment'') parsed = urlparse(page_url) url_base = parsed.netloc url_path = parsed.path if src.find(''http'') == 0: # It''s an absolute URL, do nothing. pass elif src.find(''/'') == 0: # If it''s a root URL, append it to the base URL: src = ''http://'' + url_base + src else: # If it''s a relative URL, ?

NOTA: No necesita una respuesta de Python, solo la lógica requerida.


muy simple:

>>> from urlparse import urljoin >>> urljoin(''http://mysite.com/foo/bar/x.html'', ''../../images/img.png'') ''http://mysite.com/images/img.png''