用Python切片URL

时间:2008-11-03 14:22:13

标签: python url string

我正在使用大量的URL列表。只是一个简单的问题,我试图将URL的一部分切出来,见下文:

http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3

我怎么能切出来:

http://www.domainname.com/page?CONTENT_ITEM_ID=1234

有时在CONTENT_ITEM_ID之后有两个以上的参数,每次ID都不同,我想这可以通过找到第一个&然后在那之前切掉字符&amp ;,不太确定如何做到这一点。

干杯

10 个答案:

答案 0 :(得分:14)

使用urlparse模块。检查此功能:

import urlparse

def process_url(url, keep_params=('CONTENT_ITEM_ID=',)):
    parsed= urlparse.urlsplit(url)
    filtered_query= '&'.join(
        qry_item
        for qry_item in parsed.query.split('&')
        if qry_item.startswith(keep_params))
    return urlparse.urlunsplit(parsed[:3] + (filtered_query,) + parsed[4:])

在你的例子中:

>>> process_url(a)
'http://www.domainname.com/page?CONTENT_ITEM_ID=1234'

如果您决定还需要更多查询参数,或者如果参数的顺序不固定,则此函数还有一个额外的好处,就是更容易使用,如:

>>> url='http://www.domainname.com/page?other_value=xx&param3&CONTENT_ITEM_ID=1234&param1'
>>> process_url(url, ('CONTENT_ITEM_ID', 'other_value'))
'http://www.domainname.com/page?other_value=xx&CONTENT_ITEM_ID=1234'

答案 1 :(得分:4)

快速而肮脏的解决方案就是:

>>> "http://something.com/page?CONTENT_ITEM_ID=1234&param3".split("&")[0]
'http://something.com/page?CONTENT_ITEM_ID=1234'

答案 2 :(得分:3)

另一种选择是使用拆分功能,使用&作为参数。这样,您将提取基本网址和两个参数。

   url.split("&") 

返回带有

的列表
  ['http://www.domainname.com/page?CONTENT_ITEM_ID=1234', 'param2', 'param3']

答案 3 :(得分:1)

我在下面想出来就是我需要做的事情:

url = "http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3"
url = url[: url.find("&")]
print url
'http://www.domainname.com/page?CONTENT_ITEM_ID=1234'

答案 4 :(得分:1)

Parsin URL似乎从未如此简单,这就是为什么有urlparse和urllib模块。

E.G:

import urllib
url ="http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3"
query = urllib.splitquery(url)
result = "?".join((query[0], query[1].split("&")[0]))
print result
'http://www.domainname.com/page?CONTENT_ITEM_ID=1234'

这仍然不是100%可靠,但不仅仅是自己拆分,因为你和我不知道有很多有效的网址格式,并且错误日志中有一天会发现。

答案 5 :(得分:0)

import re
url = 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3'
m = re.search('(.*?)&', url)
print m.group(1)

答案 6 :(得分:0)

查看urllib2 file name问题,了解有关此主题的一些讨论。

另请参阅“Python Find Question”问题。

答案 7 :(得分:0)

此方法不依赖于url字符串中参数的位置。我敢肯定,这可以改进,但它得到了重点。

url = 'http://www.domainname.com/page?CONTENT_ITEM_ID=1234&param2&param3'
parts = url.split('?')
id = dict(i.split('=') for i in parts[1].split('&'))['CONTENT_ITEM_ID']
new_url = parts[0] + '?CONTENT_ITEM_ID=' + id

答案 8 :(得分:0)

一个古老的问题,但是,我仍然想说查询字符串参数也可以用';'分隔不仅是'&'。

答案 9 :(得分:0)

urlparse 旁边还有furl,它有更好的恕我直言。