在Python中剥离URL



我对python很陌生。我试图解析URL的文件,只留下URL的特定部分(粗体部分)。

以下是我正在使用的URL的一些示例:

http://www.mega.pk/**washingmachine**-dawlance/
http://www.mega.pk/**washingmachine**-haier/
http://www.mega.pk/**airconditioners**-acson/
http://www.mega.pk/**airconditioners**-lg/
http://www.mega.pk/**airconditioners**-samsung/

我试过一些正则表达式,但它变得非常复杂。我想到的是从所有url中删除这个"http://www.mega.pk/",因为它是常见的,然后删除"-"之后的任何内容,包括所有斜杠。但我不知道怎么做

使用urllib(以前的urlparse)模块。它是专门为此目的而构建的。

from urllib.parse import urlparse
url = "http://www.mega.pk/washingmachine-dawlance/"
path = urlparse(url).path  # get the path from the URL ("/washingmachine-dawlnace/")
path = path[:path.index("-")]  # remove everything after the '-' including itself
path = path[1:]  # remove the '/' at the starting of the path (just before 'washing')

path变量的值为washingmachine

干杯!

使用re.sub

re.sub(r'^.*/([^/]*)-.*', r'1', line)

演示

的例子:

>>> s = '''http://www.mega.pk/washingmachine-dawlance/
    http://www.mega.pk/washingmachine-haier/'''.splitlines()
>>> for line in s:
    print(re.sub(r'^.*/([^/]*)-.*', r'1', line))

washingmachine
washingmachine
>>> 

不使用正则表达式也可以达到相同的效果。Avinash提出的解决方案更清晰,但下面的方法可能更容易理解,特别是如果您想在某些时候修改它:

s = '''http://www.mega.pk/washingmachine-dawlance/
http://www.mega.pk/washingmachine-haier/'''.splitlines()
for line in s:    
   cleanedUrl = line.replace('http://www.mega.pk/**','').replace('/','')
   urlParameters = cleanedUrl.split('-')
   print urlParameters[-1]

或者,如果你愿意,你可以使用更紧凑的版本:

s = '''http://www.mega.pk/washingmachine-dawlance/
http://www.mega.pk/washingmachine-haier/'''.splitlines()
for line in s:    
    print line.replace('http://www.mega.pk/**','').replace('/','').split('-')[-1]

您还可以使用以下正则表达式:

>>> import re
>>> regex = r"(?is)^s*https?://[^/]+/(.*?)(?:-|/).*"
>>> res = re.sub(regex, r"1", PROVIDE_URL)

将re.sub与lambda函数结合使用:

re.sub(r'^http://www.mega.pk/(w+)-.*', lambda x: x.group(), line)

您也可以使用urljoin:

import urllib.parse

url = "http://www.mega.pk/**washingmachine**-dawlance/"
website = urllib.parse.urljoin(url, '/')
print(website)

最新更新