2016-03-30 4 views
1

Dies war die Arbeit mit Python 2.7 aber nicht funktionieren in 3.5Parsing Eine URL mit Python urlparse Parse_qs

Ich versuche, eine URL params dann aufzuspalten ändern sich als eine der params mit einem neuen Wert, der ein MD5-Hash ist.

Die urlbreaks wie diese nach unten,

ParseResult(scheme='http', netloc='example.com', path='/dynamic', params='', query='t=MD5-YOUR-OAUTH-TOKEN&p=11111111', fragment='') 

Die neue URL wie diese,

newString = 'http://example.com/dynamic?t='+tokenHashed+'&p=11112311312' 

import requests, json, hashlib 
import urllib 
from urllib.parse import urlparse 
from xml.etree import ElementTree 

     product_url = item.find('product_url').text 
     parsed = urlparse(product_url) 
     qs = urlparse.parse.parse_qs(parsed.query) 
     qs['t'] = [tokenHashed] 
     newqs = urllib.urlencode(qs, doseq=1) 
     newurl = urlparse.urlunparse([newqs if i == 4 else x for i,x in enumerate(parsed)]) 



print(newurl) 

ich diesen Fehler erhalten,

'function' object has no attribute 'parse' 

vollen Stack-Trace aussehen sollte

Environment: 


Request Method: POST 
Request URL: http://localhost:8000/serviceapp/example/ 

Django Version: 1.8.8 
Python Version: 3.5.1 
Installed Applications: 
['django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'tastypie', 
'haystack', 
'serviceapp'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 


Traceback: 
File "/Applications/AMPPS/www/djang-rest/lib/python3.5/site-packages/django/core/handlers/base.py" in get_response 
    132.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 
File "/Applications/AMPPS/www/djang-rest/restapi/serviceapp/views.py" in example 
    20.   getProdcuts(advertiserName) 
File "/Applications/AMPPS/www/djang-rest/restapi/serviceapp/views.py" in getProdcuts 
    42.   qs = urlparse.parse.parse_qs(parsed.query) 

Exception Type: AttributeError at /serviceapp/example/ 
Exception Value: 'function' object has no attribute 'parse' 

Ist das ein Problem mit meiner Python-Version?

Antwort

2

Verwenden Sie from urlparse import urlparse. Oder wenn Sie Kompatibilität speichern möchten mit Python 2:

try: 
    from urllib.parse import urlparse 
except ImportError: 
    from urlparse import urlparse 

UPDATE: Ich war unaufmerksam. Versuchen Sie, qs = urlparse.parse.parse_qs(parsed.query) auf qs = urllib.parse.parse_qs(parsed.query) zu ändern.

+0

ich diese Veränderung zu bekommen, um sie Ihren Weg ... Hmm .... Kein Modul ‚urlparse‘ – wuno

+0

Ganz oben auf der Seite mit dem Namen sie enthalten Es https://docs.python.org/3.0/library/urllib.parse.html – wuno

0

Hatte das gleiche Problem für mich gearbeitet:

from urllib.parse import urlparse 
from urllib.parse import parse_qs 

product_url = item.find('product_url').text 
parsed = urlparse(product_url) 
qs = parse_qs(parsed.query)