2016-07-20 12 views
2

Ich versuche, einen Aufruf der Import.io API. Dieser Aufruf muss die folgende Struktur haben:Python Anfragen Anruf mit URL mit Parametern

'? https://extraction.import.io/query/extractor/ {{crawler_id}} _ apikey = xxx & url = http://www.example.co.uk/items.php?sortby=Price_LH&per_page=96&size=1%2C12&page=35'

Sie in diesem Anruf sehen können, den Parameter "url" hat auch subsumieren:

http://www.example.co.uk/items.php?sortby=Price_LH&per_page=96&size=1%2C12&page=35

Es kommt einfach vor, dass diese sekundäre URL auch Parameter benötigt. Aber wenn ich es als eine normale Zeichenfolge wie im obigen Beispiel passieren, die API-Antwort enthält nur den Teil vor dem ersten Parameter, wenn ich die API-Antwort erhalten:

http://www.example.co.uk/items.php?sortby=Price_LH

Und das ist nicht richtig ist, scheint es, als ob er den Anruf mit der unvollständigen URL anstelle des einen werden machen würde ich in vergangen

ich Python und Anfragen bin mit dem Anruf in der folgenden Art und Weise zu tun.

import requests 
import json 

row_dict = {'url': u'http://www.example.co.uk/items.php?sortby=Price_LH&per_page=96&size=1%2C12&page=35', 'crawler_id': u'zzz'} 
url_call = 'https://extraction.import.io/query/extractor/{0}?_apikey={1}&url={2}'.format(row_dict['crawler_id'], auth_key, row_dict['url']) 
r = requests.get(url_call) 
rr = json.loads(r.content) 

Und wenn ich drucken Sie das reuslt:

"url" : "http://www.example.co.uk/items.php?sortby=Price_LH", 

aber wenn ich r.url drucken:

https://extraction.import.io/query/extractor/zzz?_apikey=xxx&url=http://www.example.co.uk/items.php?sortby=Price_LH&per_page=96&size=1%2C12&page=35 

So in der URL es scheint alles in Ordnung, aber nicht in der Antwort zu sein.

Ich habe dies mit anderen URLs versucht und alle nach dem ersten Parameter abgeschnitten.

+0

Es scheint wie 'import.io' der api den Rest der Argumente akzeptiert . – tanglong

Antwort

5

Sie müssen URL encode die URL, die Sie an die API senden.

Der Grund dafür ist, dass die Ampersands vom Server als Marker für Parameter für die URL https://extraction.import.io/query/extractor/XXX interpretiert werden?

Aus diesem Grund ist sie in der URL gestrippt werden immer:

http://www.example.co.uk/items.php?sortby=Price_LH 

das Versuchen folgenden mit urllib.quote(row_dict['url']):

import requests 
import json 
import urllib 

row_dict = {'url': u'http://www.example.co.uk/items.php?sortby=Price_LH&per_page=96&size=1%2C12&page=35', 'crawler_id': u'zzz'} 
url_call = 'https://extraction.import.io/query/extractor/{0}?_apikey={1}&url={2}'.format(row_dict['crawler_id'], auth_key, urllib.quote(row_dict['url'])) 
r = requests.get(url_call) 
rr = json.loads(r.content) 
+0

arbeitete wie ein Charme, thx! – johan855

Verwandte Themen