1

我有大量的邮政编码,我想使用“postCodes.io”API,它在 python 中为给定的 postCode 提供经度和高度数据。

当我只请求 3-4 个邮政编码时,它不会给出错误,但是当我想要大量数据时,它会给出“413 错误”。我应该如何使用 python 等待所需的时间并再次尝试使用 API?

或者如果我在本地机器上下载 API 并使用 docker 运行,是否可以更改此请求限制? https://postcodes.io/docs#Install-notes

这是我的代码:

import requests
import json
import pandas as pd

file = 'DataSets/deneme.csv'
df = pd.read_csv(file)

postCodeArray = []

for postCode in df['PostCode']:
    postCodeArray.append(postCode)

parameters = {
    "postcodes": json.dumps(postCodeArray)   #should be used.["OX49 5NU", "M32 0JG", "NE30 1DP"]
}

response = requests.post("https://api.postcodes.io/postcodes", data=parameters)
data = response.json()

文件 = deneme.csv 看起来像这样:

Transaction Unique Identifier,PostCode,Town/City
{8A78B2B0-5D07-5CB0-E053-6B04A8C0F504},SG5 1RT,HITCHIN
{8A78B2B0-5D09-5CB0-E053-6B04A8C0F504},AL3 4GD,ST ALBANS
{8A78B2B0-5D0A-5CB0-E053-6B04A8C0F504},WD25 0NF,WATFORD
{8A78B2B0-5D0C-5CB0-E053-6B04A8C0F504},WD7 7NN,RADLETT
{8A78B2B0-5D0D-5CB0-E053-6B04A8C0F504},SG6 4LU,LETCHWORTH GARDEN CITY
{8A78B2B0-5D0E-5CB0-E053-6B04A8C0F504},SG9 9JH,BUNTINGFORD
{8A78B2B0-5D11-5CB0-E053-6B04A8C0F504},WD7 7JA,RADLETT
{8A78B2B0-5D12-5CB0-E053-6B04A8C0F504},SG12 9DZ,WARE
{8A78B2B0-5D17-5CB0-E053-6B04A8C0F504},SG6 3BA,LETCHWORTH GARDEN CITY
{8A78B2B0-5D18-5CB0-E053-6B04A8C0F504},SG6 3BA,LETCHWORTH GARDEN CITY
{8A78B2B0-5D1B-5CB0-E053-6B04A8C0F504},WD17 4UH,WATFORD
{8A78B2B0-5D1C-5CB0-E053-6B04A8C0F504},HP2 7QF,HEMEL HEMPSTEAD
{8A78B2B0-5D2E-5CB0-E053-6B04A8C0F504},HP2 4BA,HEMEL HEMPSTEAD
4

2 回答 2

1

这是因为您要从整个列表中发送一个庞大的请求。相反,您可以发送多个较小的请求,每个请求带有几个邮政编码,并将每个请求的输出附加到列表中。

HTTP 错误 413“请求实体太大”不是由速率限制引起的,而是由单个请求的大小引起的。您可以尝试向许多服务器发送大量 GET 或 POST 请求并获得相同的错误消息。

尝试一次只查询 3-4 个邮政编码(或找到最大限制并每次请求该数字)。

于 2019-11-12T17:12:31.273 回答
1

嘿,每个使用 API 的人都给了我结果。正如@john doe 所说,我试图找到一次可以请求的最大邮政编码数量。每个请求是 100 个。然而,拥有 4 GB 的数据并不能轻松计算所有这些数据。所以我找到了英国的 PostCode Zip 文件,问题就解决了。

我还发现了如何限制您的请求:通过使用另一个名为ratelimit的 api

于 2019-11-20T18:20:20.677 回答