2013-04-03 2 views
27

内のURLを構築するためのライブラリ:あなたが使用することをお勧めしますと、なぜでしょうどのようなライブラリのように私はPythonでURLを構築するためのライブラリを見つける必要があるのPython

http://subdomain.domain.com?arg1=someargument&arg2=someotherargument 

?この種のライブラリには「最良の」選択肢がありますか?

+3

リクエスト(http://docs.python-requests.org/en/latest/)が一般的に推奨されていますが、組み込みモジュールではありません。 – Moshe

+0

それは大丈夫です、私は、それが内蔵されているかどうかに関係なく、任意のライブラリを求めています。ありがとうございました! –

答えて

18

urlparse python標準ライブラリではすべて有効なURLを構築しています。 urlparseのドキュメントを確認してください

+6

具体的には[urlunparse](https://docs.python.org/2/library/urlparse.html#urlparse.urlunparse)またはURLを作成するために分割しない –

+5

urlparseはpython 3以降urllib.parseに移動されました:https:/ /docs.python.org/3.5/library/urllib.parse.html?highlight=urlparse –

22

私はPythonのurllibのために行くでしょう、それは組み込みのライブラリです。

# Python 2: 
import urllib 

# Python 3: 
# import urllib.parse 

getVars = {'var1': 'some_data', 'var2': 1337} 
url = 'http://domain.com/somepage/?' 

# Python 2: 
print(url + urllib.urlencode(getVars)) 

# Python 3: 
# print(url + urllib.parse.urlencode(getVars)) 

出力:

http://domain.com/somepage/?var2=1337&var1=some_data 
+3

urllib.urlencode(getVars) – lasote

+0

Pythonの '+'で文字列を連結しません。 '' {} {} 'を試してください。format(url、querystring) ' – spudfkc

+0

私は同感ですが、トレードオフです。この場合、連結には+を使用することに何も問題はなく、Python 2以降では+を使用してもスピード違反はありません。 しかし、PEP8標準を完全に遵守し、クロスコンパチビリティ/安定性を得るためには、format()、append()、およびjoin()を使う方が良いでしょう。 – chjortlund

4
import requests 
payload = {'key1':'value1', 'key2':'value2'} 
response = request.get('http://fireoff/getdata', params=payload) 
print response.url 

プリント:ここ http://fireoff/getdata?key1=value1&key2=value2

+2

副作用としてWebリクエストも発行しますか? –

+0

@TylerLong [はいです](http://docs.python-requests.org/ja/latest/api/#main-interface)。 –

+27

これは「ケーキをどうやって焼くのですか?」と答えることに似ています。 「ベーカリーを開き、中を歩いてケーキを頼む」 – Ian

4
import urllib 

def make_url(base_url , *res, **params): 
    url = base_url 
    for r in res: 
     url = '{}/{}'.format(url, r) 
    if params: 
     url = '{}?{}'.format(url, urllib.urlencode(params)) 
    return url 

>>>print make_url('http://example.com', 'user', 'ivan', aloholic='true', age=18) 

http://example.com/user/ivan?age=18&aloholic=true 
4

URLを生成するurlparseの使用例です。これにより、スラッシュのチェックを心配することなくURLへのパスを追加する利便性が提供されます。

import urllib 
import urlparse 

def build_url(baseurl, path, args_dict): 
    # Returns a list in the structure of urlparse.ParseResult 
    url_parts = list(urlparse.urlparse(baseurl)) 
    url_parts[2] = path 
    url_parts[4] = urllib.urlencode(args_dict) 
    return urlparse.urlunparse(url_parts) 

args = {'arg1': 'value1', 'arg2': 'value2'} 
# works with double slash scenario 
url1 = build_url('http://www.example.com/', '/somepage/index.html', args) 
print(url1) 

>>> http://www.example.com/somepage/index.html?arg1=value1&arg2=value2 

# works without slash 
url2 = build_url('http://www.example.com', 'somepage/index.html', args) 
print(url2) 

>>> http://www.example.com/somepage/index.html?arg1=value1&arg2=value2 
関連する問題