用拆分和合并或regex替换从URL中排除路径。

问题描述 投票:0回答:1

我的计划是改变一个URL,删除一些路径。例如,从这个:site = "link.com/path1/path2/path3/random" 我想得到这个。"link.com/path1/path3/random" 只有当 path2 存在。path2 可能会有稍微不同的名称(如 path2_version1, path2_version2 等)。)

我的解决方案如下。实际上,我是,分别获取所有的路径,然后合并它们。

    import re
    from urllib.parse import urljoin
    import urllib.request
    import os
    import csv

    site = "https://img.mysite.com/c_fill,g_auto,w_750,h_536/q_auto,f_auto/mysitecom/2020/05/06/w331e4787162_5/my-image-saved"

def image_graber(old_url):
    url_main = 'https://img.mysite.com/mysitecom/'

    split_url_paths = old_url.rsplit('/', 6)
    url_subfolder1 = split_url_paths[2]
    url_subfolder2 = split_url_paths[3]
    url_subfolder3 = split_url_paths[4]
    url_subfolder4 = split_url_paths[5]
    url_subfolder5 = split_url_paths[6]

    final_url = url_main + '/' + url_subfolder1 + '/' + url_subfolder2 + '/' + url_subfolder3 + '/' + url_subfolder4 + '/' + url_subfolder5 

    urllib.request.urlretrieve(final_url, "C:\My Site\IMG\/"+os.path.basename(final_url))


image_graber(site)

我试着改了一下脚本,让它更专业。在这种情况下,一个 urljoin 不能工作,因为它最多可以使用3条路径。所以,我使用了多个路径,但令我惊讶的是,它并没有工作,因为它应该。

#This didn't work
url_join1 = urljoin(url_main, url_subfolder1, url_subfolder2)
print(url_join1)
url_join2 = urljoin(url_join1, url_subfolder3, url_subfolder4)
print(url_join2)
final_join = urljoin(url_join2, url_subfolder5)
print(final_join)

我的问题是,为什么上面的方法不能用?一个可能更简单和更快的方法是使用regex来提取这部分内容,也进行了测试。

if('c_fill' or 'q_auto' in site):
    exclude_path1 = re.sub(r'/c_fill[^/]+/',r'/',site)
    exclude_path2 = re.sub(r'/q_auto[^/]+/',r'/',exclude_path1)
    print(exclude_path2)
python python-3.x url extract
1个回答
0
投票

示例旧的url。

old_url = 'https://img.mysite.com/c_fill,g_auto,w_750,h_536/alsothis/q_auto,f_auto/mysitecom/2020/05/06/deletethis/w331e4787162_5/my-image-saved'

现在你可以简单地用''来分割它,然后做一个列表。

splitted = old_url.split('/')

另外,创建不需要的或要删除的东西

delete = ['alsothis','w331e4787162_5', 'deletethis']

现在你可以做一个快速的列表理解,以得到你的最终url。

res = '/'.join([x for x in splitted if x not in delete])

res会给你所需的输出。

© www.soinside.com 2019 - 2024. All rights reserved.