2016-01-26 68 views
-1

所以我有一個字符串,我有一個URL。 的URL /串是這樣的:
https://example.com/main/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels
我想要得到的code但我coulnd't弄清楚如何。我看着.split()方法。但我不認爲它是有效的。我真的找不到一種方法來實現它的工作。
Python:從URL查詢字符串獲取數據

+0

你有沒有嘗試爲它編寫一個程序? – Nik

+0

所以你想獲得'代碼'查詢參數的值? –

+0

使用['urlparse'](https://docs.python.org/2/library/urlparse.html)等已包含的模塊進行研究。然而,你也可以用'split()'來做這個簡單的事情 - 我不知道爲什麼你在第一次得到解決方案之前擔心效率。 – birryree

回答

4

使用urlparseparse_qs

from urlparse import urlparse, parse_qs 
# For Python 3: 
# from urllib.parse import urlparse, parse_qs 

url = ' https://example.com/main' 
url += '/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels' 

parsed = urlparse(url) 
code = parse_qs(parsed.query).get('code')[0] 

它正是你想要的。

0

正如@IronFist所提到的,.split()方法只有在您假設代碼參數中沒有'&'時才起作用。如果沒有,你可以使用.split()方法幾次並獲得所需的代碼放慢參數:從urlparse模塊

url = "https://example.com/main/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels" 
code = url.split('/?')[1].split('&')[0] 
+0

爲什麼投了票? – Learner

+0

不是downvoter,但原因很明顯,OP希望'代碼'查詢參數不是所有的......你的答案只是分裂在'/?'上,它將返回包含所有查詢參數的第二個字符串 –

+0

@IronFist哎呀,謝謝提及。現在修復。 – Learner

0

使用正則表達式:

>>> import re 
>>> url = 'https://example.com/main/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels' 
>>> code = re.search("code=([0-9a-zA-Z]+)&?", url).group(1) 
>>> print code 
32ll48hma6ldfm01bpki 
+0

只需要代碼參數。 – Learner

+0

@Learner對不起,錯誤複製答案... – Javitronxo

+1

無法保證「數據」將在'代碼'後面的查詢字符串中的下一個字段。可能最好只是閱讀'&'。除非'code'是查詢字符串中的最後一個字段,否則請閱讀'$'。或者只使用urlparse。 – PaulMcG

0

有很多方法在做這個!更簡單的方法是使用urlparse。另一種方法是使用正則表達式,但專家建議在URL上使用正則表達式可能很乏味,代碼變得非常難以維護。

另一個簡單的方法如下圖所示,

str1 = 'https://example.com/main/?code=32ll48hma6ldfm01bpki&data=57600&data2=aardappels' 
codeStart = str1.find('code=') 
codeEnd = str1.find('&data=') 
print str1[codeStart+5:codeEnd]