【问题标题】:Python 3.6 Requests too longPython 3.6 请求太长
【发布时间】:2017-10-10 23:03:28
【问题描述】:

我正在尝试使用请求从 NPI API 中提取信息,但提取信息平均需要 20 多秒。如果我尝试通过我的网络浏览器访问它,只需不到一秒钟的时间。我对此很陌生,任何帮助将不胜感激。这是我的代码。

import json
import sys
import requests

url = "https://npiregistry.cms.hhs.gov/api/?number=&enumeration_type=&taxonomy_description=&first_name=&last_name=&organization_name=&address_purpose=&city=&state=&postal_code=10017&country_code=&limit=&skip="

htmlfile=requests.get(url)


data = htmlfile.json()

for i in data["results"]:
    print(i) 

【问题讨论】:

  • 这真的很奇怪。刚才还在工作。我想我打错了。这是工作链接:npiregistry.cms.hhs.gov/api/…
  • 对我来说 curl 和 python 大约需要 1.3 秒
  • curl 和 Requests 是不同的库吗?
  • 它是使用该库构建的library and a command line utility。我稍后使用,不涉及python。
  • 我不认为 python 3.6 支持 curl。请求真的比 curl 慢得多吗?我喜欢请求的易用性。

标签: python http python-requests python-3.6


【解决方案1】:

这可能是由于响应格式不正确,或者由于requests 设置请求所需的时间超过了必要的时间。要解决这些问题,请继续阅读:

服务器响应格式不正确

一个可能的问题是响应解析实际上是有问题的行。您可以通过不读取从服务器收到的响应来检查这一点。如果代码仍然很慢,这不是您的问题,但如果解决了问题,问题可能在于解析响应。

  1. 如果某些标头设置不正确,可能会导致解析错误,从而阻止分块传输 (source)。
  2. 在其他情况下,手动设置编码可能会解决解析问题 (source)。

要解决这些问题,请尝试:

r = requests.get(url)
r.raw.chunked = True # Fix issue 1
r.encoding = 'utf-8' # Fix issue 2
print(response.text)

设置请求需要很长时间

这主要适用于连续发送多个请求的情况。为了防止requests 每次都必须建立连接,您可以使用requests.Session。这可确保与服务器的连接保持打开和配置状态,并将 cookie 保留为一个很好的好处。试试这个(source):

import requests
session = requests.Session()
for _ in range(10):
    session.get(url)

没有解决您的问题?

如果这没有解决您的问题,我收集了一些其他可能的解决方案here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2020-09-24
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多