Python 请求使用参数调用 URL

标签 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)

当我打印结果时:

"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

所以在 URL 中似乎一切正常,但在响应中却不是。

我对其他 URL 进行了尝试,但都在第一个参数后被截断。

最佳答案

requests 库将处理您所有的 URL encoding需要。这是使用 requests 将参数添加到 URL 的正确方法:

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"
}

请注意,上面的 {{crawler_id}} 部分不是 URL 参数,而是基本 URL 的一部分。由于 Requests 没有执行一般的字符串模板化,因此应该使用其他东西来解决这个问题(见下面的评论)。

关于Python 请求使用参数调用 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38476648/

相关文章:

python - 单元测试 python 请求?

json - 如何使用 PYTHON 以字典类型而不是字符串类型获取 JSON.loads() 输出

python - 使用 xlwt 将 Python 列表写入 Excel 行

python - 使用 Python 阻止 Internet Explorer URL?

python - 在 ipython 笔记本上创建包含管道的表

python-requests,找到正确的编码

python - 使用计数比率的附加列对 DataFrame 进行分组和旋转

web-scraping - 如何使用 Import.io 抓取多个页面

google-sheets - 将数据从 Google 表格流式传输到 BigQuery 以在 Tableau 中进行可视化

web-crawler - 带下拉菜单的 import.io 网络爬虫