Python 从页面上的相对URL重建绝对URL
给定一个页面的绝对url,以及在该页面中找到的一个相对链接,是否有办法a)最终重建或b)尽最大努力重建相对链接的绝对url 在我的例子中,我正在使用Beauty soup从给定url读取html文件,剥离所有img标记源,并尝试构建页面图像的绝对url列表 到目前为止,我的Python函数如下所示:Python 从页面上的相对URL重建绝对URL,python,html,url-parsing,Python,Html,Url Parsing,给定一个页面的绝对url,以及在该页面中找到的一个相对链接,是否有办法a)最终重建或b)尽最大努力重建相对链接的绝对url 在我的例子中,我正在使用Beauty soup从给定url读取html文件,剥离所有img标记源,并尝试构建页面图像的绝对url列表 到目前为止,我的Python函数如下所示: function get_image_url(page_url,image_src): from urlparse import urlparse # parsed = urlpa
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, ?
注意:不需要Python回答,只需要所需的逻辑 非常简单:
>>> from urlparse import urljoin
>>> urljoin('http://mysite.com/foo/bar/x.html', '../../images/img.png')
'http://mysite.com/images/img.png'
用于根据基本URL解析(可能是相对的)URL
但是,web页面的基本URL不一定与从中获取文档的URL相同,因为HTML允许页面指定其首选的基本URL。您需要的逻辑如下所示:
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
(如果你在解析XHTML,那么理论上你应该考虑到比较复杂的问题。但是你可能不用担心,因为没有人真正使用XHTML。)嘿,酷!!(我想我确实需要Python。)在Python 3中,URLPASSE模块被重命名为urllib.parse。因此,
从urllib.parse导入urljoin