我正在使用大量的URL列表。只是一个简单的问题,我试图将URL的一部分切出来,见下文:
http://www.domainname.com/page?CONTENT_ITEM_ID=1234¶m2¶m3
我怎么能切出来:
http://www.domainname.com/page?CONTENT_ITEM_ID=1234
有时在CONTENT_ITEM_ID之后有两个以上的参数,每次ID都不同,我想这可以通过找到第一个&然后在那之前切掉字符&amp ;,不太确定如何做到这一点。
干杯
答案 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¶m3&CONTENT_ITEM_ID=1234¶m1'
>>> 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¶m3".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¶m2¶m3"
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¶m2¶m3"
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¶m2¶m3'
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¶m2¶m3'
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)