একটি URL থেকে পরামিতি পুনরুদ্ধার করা rie


164

নীচের মত একটি ইউআরএল দেওয়া, আমি কীভাবে ক্যোয়ারী প্যারামিটারগুলির মান পার্স করতে পারি? উদাহরণস্বরূপ, এক্ষেত্রে আমি এর মান চাই def

/abc?def='ghi'

আমি আমার পরিবেশে জ্যাঙ্গো ব্যবহার করছি; requestবস্তুটিতে এমন কোনও পদ্ধতি আছে যা আমাকে সাহায্য করতে পারে?

আমি ব্যবহার করার চেষ্টা করেছি self.request.get('def')কিন্তু এটি যেমন ghiপ্রত্যাশা করেছিলাম তেমন মানটি ফেরায় না।

উত্তর:


255

পাইথন 2:

import urlparse
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print urlparse.parse_qs(parsed.query)['def']

পাইথন 3:

import urllib.parse as urlparse
from urllib.parse import parse_qs
url = 'http://foo.appspot.com/abc?def=ghi'
parsed = urlparse.urlparse(url)
print(parse_qs(parsed.query)['def'])

parse_qsমানগুলির একটি তালিকা প্রদান করে, সুতরাং উপরের কোডটি মুদ্রণ করবে ['ghi']

পাইথন 3 ডকুমেন্টেশন এখানে।


58
পাইথন 3import urllib.parse as urlparse
ইভান ডি পাজ সেন্টেনো

26
নোট যা parse_qsআপনাকে একটি তালিকা অবজেক্ট ফিরিয়ে দেবে। আপনি যদি স্ট্রিং চান তবে আপনাকে এটির প্রথম উপাদানটি পেতে হবেurlparse.parse_qs(parsed.query)['def'][0]
রাফায়েম

3
মনে রাখবেন যে url এ '#' অক্ষরটি ঠিক এইভাবে ধারণ করে: foo.appspot.com/#/abc?def=ghi , আপনাকে অবশ্যই খণ্ডগুলি অস্বীকার করতে হবে: urlparse(url, allow_fragments=False)অন্যথায় কোয়েরিটি খালি স্ট্রিং ফিরে আসবে।
কোডজজএক্স

2
অজগর 3 এ, অবশ্যই ব্যবহার করতে হবে from urllib.parse import urlparse, parse_qsএবংparse_qs(parsed.query)
ডিএথেম্পারার

1
পছন্দ করুন urlparse.urlparse(url)->urlparse(url)
উইনানড

55

আমি হতবাক হয়েছি এই সমাধানটি ইতিমধ্যে এখানে নেই। ব্যবহার করুন:

request.GET.get('variable_name')

এটি "জিইটি" অভিধান থেকে ভেরিয়েবলটি "পাবে" এবং যদি উপস্থিত থাকে তবে 'ভেরিয়েবল_নাম' মানটি, বা যদি উপস্থিত না থাকে তবে কোনও কিছুই পাওয়া যাবে না।


3
এটি শীর্ষ উত্তর হওয়া উচিত। একটি যাদুমন্ত্র মত কাজ করে.
মুনতাসির2000

2
আমাকে ছাড়তে হয়েছিল self, তবে আমি উপরের মন্তব্যের সাথে একমত।
ম্যাট ক্রিমেন্স

আমি এটি কাজ করতে পারি না। হতে পারে আরও কিছু বিশদ। আপনি কিভাবে অনুরোধ পাচ্ছেন? এই অজগর 3 কি সামঞ্জস্যপূর্ণ?
ggedde

3
@ggedde এই উত্তরটি (প্রশ্নের মতো) জ্যাঙ্গোর জন্য, এটি একটি জাঙ্গো অনুরোধের বিষয়। আপনি যদি জাঙ্গো ব্যবহার না করে থাকেন তবে অন্য একটি উত্তর ব্যবহার করুন।
ফ্লোরিয়ান

55
import urlparse
url = 'http://example.com/?q=abc&p=123'
par = urlparse.parse_qs(urlparse.urlparse(url).query)

print par['q'][0], par['p'][0]

46

পাইথন> 3.4

from urllib import parse
url = 'http://foo.appspot.com/abc?def=ghi'
query_def=parse.parse_qs(parse.urlparse(url).query)['def'][0]

4
এটি করার সেরা উপায় আইএমও। অতিরিক্ত প্যাকেজগুলির প্রয়োজন নেই এবং পাইথন 3.5 তে A + কাজ করে।
wanaryytel

22

ফার্ল নামে একটি নতুন গ্রন্থাগার রয়েছে। ইউআরএল বীজগণিত করার জন্য আমি এই পাঠাগারটিকে সর্বাধিক অজগর বলে মনে করি। স্থাপন করা:

pip install furl

কোড:

from furl import furl
f = furl("/abc?def='ghi'") 
print f.args['def']

3
দুর্দান্ত গ্রন্থাগার! এটি সম্পর্কে জানা ছিল না তবে
মনোমুগ্ধকর

3
:) আমার জন্য urlparse কাজ করার চেষ্টা করার সময় আমি আমার অংশ নষ্ট করেছি। আর না.
মায়াঙ্ক জয়সওয়াল

18

আমি জানি যে এটি কিছুটা দেরি হয়ে গেছে তবে যেহেতু আজ আমি এখানে নিজেকে খুঁজে পেয়েছি, তাই আমি ভেবেছিলাম এটি অন্যের জন্য একটি দরকারী উত্তর হতে পারে।

import urlparse
url = 'http://example.com/?q=abc&p=123'
parsed = urlparse.urlparse(url)
params = urlparse.parse_qsl(parsed.query)
for x,y in params:
    print "Parameter = "+x,"Value = "+y

Parse_qsl () দিয়ে "ডেটা নাম, মান জোড়ের তালিকা হিসাবে ফিরে আসে।"


5

আপনি যে ইউআরএলটি উল্লেখ করছেন সেটি একটি ক্যোয়ারির ধরণ এবং আমি দেখতে পাচ্ছি যে অনুরোধটি অবজেক্টটি কোয়েরি আর্গুমেন্টগুলি পাওয়ার জন্য আর্গুমেন্ট নামে একটি পদ্ধতি সমর্থন করে । আপনি self.request.get('def')অবজেক্ট থেকে আপনার মান পেতে সরাসরি চেষ্টা করতে পারেন ..


3
def getParams(url):
    params = url.split("?")[1]
    params = params.split('=')
    pairs = zip(params[0::2], params[1::2])
    answer = dict((k,v) for k,v in pairs)

আশাকরি এটা সাহায্য করবে


এটি কোনও ওয়েবঅ্যাপের ভিতরে থাকা প্রয়োজন হবে না।
নিক জনসন


3

এটির কিছু করার দরকার নেই। শুধুই সাথে

self.request.get('variable_name')

লক্ষ্য করুন যে আমি পদ্ধতিটি (জিইটি, পোস্ট, ইত্যাদি) নির্দিষ্ট করছি না। এটি ভাল নথিভুক্ত এবং এটি একটি উদাহরণ

আপনি জ্যাঙ্গো টেমপ্লেটগুলি ব্যবহার করেন না তার অর্থ এই নয় যে হ্যান্ডলারটিও জ্যাঙ্গো দ্বারা প্রসেস করা হয়


3

খাঁটি পাইথনে:

def get_param_from_url(url, param_name):
    return [i.split("=")[-1] for i in url.split("?", 1)[-1].split("&") if i.startswith(param_name + "=")][0]

2
import cgitb
cgitb.enable()

import cgi
print "Content-Type: text/plain;charset=utf-8"
print
form = cgi.FieldStorage()
i = int(form.getvalue('a'))+int(form.getvalue('b'))
print i

0

বিটিডব্লু, আমি পার্সে কিউস () ব্যবহার করে এবং খালি মান প্যারামিটারগুলি পেয়ে সমস্যা পেয়েছি এবং শিখেছি যে কোনও মান নেই এমন একটি ক্যারিয়ার স্ট্রিংয়ের প্যারামিটারগুলির একটি তালিকা ফেরত দেওয়ার জন্য আপনাকে একটি দ্বিতীয় alচ্ছিক প্যারামিটার 'কিপ_ব্ল্যাঙ্ক_ভালিউস' পাস করতে হবে। এটি মিথ্যা ডিফল্ট। কিছু কৃপিত লিখিত এপিআই-এর কোনও মান না থাকলেও পরামিতি উপস্থিত থাকতে হবে

for k,v in urlparse.parse_qs(p.query, True).items():
  print k

0

W3lib.url একটি দুর্দান্ত লাইব্রেরি আছে

from w3lib.url import url_query_parameter
url = "/abc?def=ghi"
print url_query_parameter(url, 'def')
ghi

0

get_parsed_url [4] .স্প্লিট ('&')] অংশের জন্য পরামিতি = ডিক ([অংশ.স্প্লিট ('='))

এই এক সহজ। পরিবর্তনশীল পরামিতিগুলিতে সমস্ত পরামিতিগুলির একটি অভিধান থাকবে।


0

টর্নেডো ব্যবহারকারীদের জন্য এখানে কোনও উত্তর নেই:

key = self.request.query_arguments.get("key", None)

এই পদ্ধতিটি অবশ্যই কোনও হ্যান্ডলারের ভিতরে কাজ করা উচিত যা থেকে প্রাপ্ত:

tornado.web.RequestHandler

যখন অনুরোধ করা কীটি পাওয়া যায় না তখন এই পদ্ধতিটি ফিরে আসবে এমন উত্তর কোনওটিই নয়। এটি আপনাকে কিছু ব্যতিক্রম হ্যান্ডলিং সংরক্ষণ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.