Python使用参数

时间:2016-07-20 08:53:28

标签: python python-requests import.io

我正在尝试调用import.io API。 此调用需要具有以下结构:

  

' 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'

您可以在该通话中看到参数" url"必须包括在内:

  

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

这个辅助URL也需要参数。但是,如果我将其作为普通字符串传递,如上例所示,API响应仅在我获得API响应时包含第一个参数之前的部分:

  

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

这是不正确的,似乎它会使用不完整的URL而不是我传入的URL进行调用。

我正在使用Python并请求以下列方式进行调用:

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)

当我打印reuslt时:

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

但是当我打印r.url时:

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

所以在网址中,一切似乎都很好,但不在回复中。

我尝试使用其他网址,并在第一个参数之后全部删除。

2 个答案:

答案 0 :(得分:6)

您需要URL encode您要发送给API的网址。

原因是服务器将&符号解释为URL https://extraction.import.io/query/extractor/XXX参数的标记?

这就是为什么他们被剥离了网址:

'0'

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

尝试以下操作
urllib.quote(row_dict['url'])

答案 1 :(得分:6)

requests库将满足您的所有URL encoding需求。这是使用requests

向网址添加参数的正确方法
import requests

base_url = "https://extraction.import.io/query/extractor/{{crawler_id}}"
params = dict()
params["_apikey"] = "xxx"
params["url"] = "http://www.example.co.uk/items.php?sortby=Price_LH&per_page=96&size=1%2C12&page=35"

r = requests.get(base_url, params=params)
print(r.url)

格式化参数的可读性更强:

params = {
    "_apikey" : "xxx",
    "url" : "http://www.example.co.uk/items.php?sortby=Price_LH&per_page=96&size=1%2C12&page=35"
}