it-swarm.com.de

Die beste Methode zum Parsen einer URL-Abfragezeichenfolge

Wie können Daten aus einer URL-Abfragezeichenfolge (z. B. Daten, die von einem Formular an die URL angehängt wurden) in Python am besten analysiert werden? Mein Ziel ist es, Formulardaten zu akzeptieren und auf derselben Seite anzuzeigen. Ich habe mehrere Methoden recherchiert, die nicht ganz das sind, wonach ich suche.

Ich erstelle einen einfachen Webserver mit dem Ziel, mehr über Sockets zu erfahren. Dieser Webserver wird ausschließlich zu Testzwecken verwendet.

GET /?1pm=sample&2pm=&3pm=&4pm=&5pm= HTTP/1.1
Host: localhost:50000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20100101 Firefox/11.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost:50000/?1pm=sample&2pm=&3pm=&4pm=&5pm=
42
egoskeptical

Das urllib.parse-Modul ist Ihr Freund: https://docs.python.org/3/library/urllib.parse.html

Check out rllib.parse.parse_qs (Analysieren einer Abfragezeichenfolge, d. H. Von GET an den Server gesendete Formulardaten oder von POST gesendete Formulardaten, zumindest für nicht mehrteilige Daten). Es gibt auch cgi.FieldStorage zum Interpretieren von mehrteiligen Daten.

Informationen zum Parsen des Restes einer HTTP-Interaktion finden Sie unter RFC2616 , der HTTP/1.1-Protokollspezifikation.

44
modelnine

Hier ist ein Beispiel mit python3 urllib.parse:

from urllib.parse import urlparse, parse_qs
URL='https://someurl.com/with/query_string?i=main&mode=front&sid=12ab&enc=+Hello'
parsed_url = urlparse(URL)
parse_qs(parsed_url.query)

ausgabe:

{'i': ['main'], 'enc': [' Hello '], 'mode': ['front'], 'sid': ['12ab']}

Hinweis für python2: from urlparse import urlparse, parse_qs

SIEHE: https://pythonhosted.org/six/#module-six.moves.urllib.parse

28
jmunsch

Wenn Sie einen eindeutigen Schlüssel aus der Abfragezeichenfolge benötigen, verwenden Sie dict() mit parse_qsl()

import urllib.parse
urllib.parse.urlparse('https://someurl.com/with/query_string?a=1&b=2&b=3').query
    a=1&b=2&b=3
urllib.parse.parse_qs('a=1&b=2&b=3');
    {'a': ['1'], 'b': ['2','3']}
urllib.parse.parse_qsl('a=1&b=2&b=3')
    [('a', '1'), ('b', '2'), ('b', '3')]
dict(urllib.parse.parse_qsl('a=1&b=2&b=3'))
    {'a': '1', 'b': '3'}
8
ahuigo

eingebaut in python 2.7

>>> from urlparse import parse_qs
>>> parse_qs("search=quint&tags=python")
{'search': ['quint'], 'tags': ['python']}
1
Cuyler Quint