如何使用Python解析链接?

时间:2015-11-11 04:09:26

标签: python http parsing url hyperlink

此函数将字符串作为输入,如果字符串以http://开头或字符串以https://开头,则函数将假定该字符串是绝对链接。如果URL以/开头,则该函数会将其转换为绝对链接。

请注意,base目前是一个全局变量。我主要担心的是这个功能做了太多假设。有没有办法在没有这么多假设的情况下完成解析URL的任务?

def get_url(item):
    #absolute link
    if item.startswith('http://') or item.startswith('https://'):
        url = item
    #root-relative link
    elif item.startswith('/'):
        url = base + item
    else:
        url = base + "/" + item
    return url

2 个答案:

答案 0 :(得分:0)

使用urljoin模块中的urlparse

from urlparse import urljoin

base = 'http://myserver.com'

def get_url(item):
    return urljoin(base, item)

urljoin自己处理绝对或相对链接。

<强>实施例

print get_url('/paul.html')
print get_url('//otherserver.com/paul.html')
print get_url('https://paul.com/paul.html')
print get_url('dir/paul.html')

<强>输出

http://myserver.com/paul.html
http://otherserver.com/paul.html
https://paul.com/paul.html
http://myserver.com/dir/paul.html

答案 1 :(得分:0)

1 - 使用正则表达式

2 - 向您的基本网址添加尾随/

import re        
base = 'http://www.example.com/'

def get_url(item):
    #absolute link
    pattern = "(http|https)://[\w\-]+(\.[\w\-]+)+\S*"  # regex pattern to approve http and https started strings
    if re.search(pattern, item):
        url = item
    #root-relative link
    else:
        url = base + item.lstrip('/')
    return url