Python中如何剥离URL

4

我是一名新手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/”,因为它很常见,然后删除所有斜杠和"-"之后的内容。但我不知道如何做到。

6个回答

4
使用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

干杯!


3
使用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
>>> 

3

你可以不使用正则表达式来完成相同的操作。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]

1

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

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

你将获得期望的结果。


0

使用 re.sub 与 lambda 函数配合:

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

0

你也可以使用urljoin来实现这个功能:

import urllib.parse


url = "http://www.mega.pk/**washingmachine**-dawlance/"

website = urllib.parse.urljoin(url, '/')

print(website)

你的解决方案的结果是基本URL而不是路径,这对我非常有用,因为我只需要基本URL。 - uak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接