更改 urlparse.path 的 url
change urlparse.path of a url
这里是 python 代码:
url = http://www.phonebook.com.pk/dynamic/search.aspx
path = urlparse(url)
print (path)
>>>ParseResult(scheme='http', netloc='www.phonebook.com.pk', path='/dynamic/search.aspx', params='', query='searchtype=cat&class_id=4520&page=1', fragment='')
print (path.path)
>>>/dynamic/search.aspx
现在我需要将 path.path
更改为我的要求。就像如果“/dynamic/search.aspx”是路径那么我只需要第一个斜杠和最后一个斜杠之间的部分,包括斜杠“/dynamic/”。
我已经尝试过这两行,但最终结果不是我所期望的,这就是我问这个问题的原因,因为我对 "urllib.parse" 的了解不足。
path = path.path[:path.path.index("/")]
print (path)
>>>Returns nothing.
path = path.path[path.path.index("/"):]
>>>/dynamic/search.aspx (as it was before, no change.)
简而言之,无论 path.path 结果是什么,我只需要目录名。例如:“dynamic/search/search.aspx”。现在我需要 "dynamic/search/"
我已经尝试研究 urlparse
以找到任何可以帮助您解决问题的方法,但没有找到,可能会被忽略,但无论如何,在这个级别上,您可能不得不制作你自己的方法或技巧:
>>> path.path
'/dynamic/search.aspx'
>>> import re
>>> d = re.search(r'/.*/', path.path)
>>> d.group(0)
'/dynamic/'
这只是给你的一个例子,你也可以使用内置方法,像这样:
>>> i = path.path.index('/', 1)
>>>
>>> path.path[:i+1]
'/dynamic/'
编辑:
我没有注意到你最后的例子,所以这是另一种方式:
>>> import os
>>> path = os.path.dirname(path.path) + os.sep
>>> path
'/dynamic/'
>>> path = os.path.dirname(s) + os.sep
>>> path
'dynamic/search/'
或 re
:
>>> s
'dynamic/search/search.aspx'
>>> d = re.search(r'.*/', s)
>>> d
<_sre.SRE_Match object; span=(0, 15), match='dynamic/search/'>
>>> d.group(0)
'dynamic/search/'
>>>
>>> s = '/dynamic/search.aspx'
>>> d = re.search(r'.*/', s)
>>> d.group(0)
'/dynamic/'
首先,path
的所需部分可以使用 rfind
获得,其中 returns 是最后一次出现的索引。 + 1
用于保留尾部斜杠。
desired_path = path.path[:path.path.rfind("/") + 1]
二、使用_replace
方法替换urlparse
对象的path
属性如下:
desired_url = urlunparse(path._replace(path=desired_path))
完整的工作示例:
from urllib.parse import urlparse, urlunparse
url = "http://www.phonebook.com.pk/dynamic/search/search.aspx"
path = urlparse(url)
desired_path = path.path[:path.path.rfind("/") + 1]
desired_url = urlunparse(path._replace(path=desired_path))
这里是 python 代码:
url = http://www.phonebook.com.pk/dynamic/search.aspx
path = urlparse(url)
print (path)
>>>ParseResult(scheme='http', netloc='www.phonebook.com.pk', path='/dynamic/search.aspx', params='', query='searchtype=cat&class_id=4520&page=1', fragment='')
print (path.path)
>>>/dynamic/search.aspx
现在我需要将 path.path
更改为我的要求。就像如果“/dynamic/search.aspx”是路径那么我只需要第一个斜杠和最后一个斜杠之间的部分,包括斜杠“/dynamic/”。
我已经尝试过这两行,但最终结果不是我所期望的,这就是我问这个问题的原因,因为我对 "urllib.parse" 的了解不足。
path = path.path[:path.path.index("/")]
print (path)
>>>Returns nothing.
path = path.path[path.path.index("/"):]
>>>/dynamic/search.aspx (as it was before, no change.)
简而言之,无论 path.path 结果是什么,我只需要目录名。例如:“dynamic/search/search.aspx”。现在我需要 "dynamic/search/"
我已经尝试研究 urlparse
以找到任何可以帮助您解决问题的方法,但没有找到,可能会被忽略,但无论如何,在这个级别上,您可能不得不制作你自己的方法或技巧:
>>> path.path
'/dynamic/search.aspx'
>>> import re
>>> d = re.search(r'/.*/', path.path)
>>> d.group(0)
'/dynamic/'
这只是给你的一个例子,你也可以使用内置方法,像这样:
>>> i = path.path.index('/', 1)
>>>
>>> path.path[:i+1]
'/dynamic/'
编辑:
我没有注意到你最后的例子,所以这是另一种方式:
>>> import os
>>> path = os.path.dirname(path.path) + os.sep
>>> path
'/dynamic/'
>>> path = os.path.dirname(s) + os.sep
>>> path
'dynamic/search/'
或 re
:
>>> s
'dynamic/search/search.aspx'
>>> d = re.search(r'.*/', s)
>>> d
<_sre.SRE_Match object; span=(0, 15), match='dynamic/search/'>
>>> d.group(0)
'dynamic/search/'
>>>
>>> s = '/dynamic/search.aspx'
>>> d = re.search(r'.*/', s)
>>> d.group(0)
'/dynamic/'
首先,path
的所需部分可以使用 rfind
获得,其中 returns 是最后一次出现的索引。 + 1
用于保留尾部斜杠。
desired_path = path.path[:path.path.rfind("/") + 1]
二、使用_replace
方法替换urlparse
对象的path
属性如下:
desired_url = urlunparse(path._replace(path=desired_path))
完整的工作示例:
from urllib.parse import urlparse, urlunparse
url = "http://www.phonebook.com.pk/dynamic/search/search.aspx"
path = urlparse(url)
desired_path = path.path[:path.path.rfind("/") + 1]
desired_url = urlunparse(path._replace(path=desired_path))