python - 使用 CSV 中的数据迭代 URL 以进行 API 数据拉取 - Python

标签 python api loops csv iteration

我在 CSV 文件的一列中包含大约 20,000 个邮政编码。我正在尝试通过 API 根据这些邮政编码提取一些地理选举数据。此 API 的 url 会迭代到最后(每次迭代邮政编码都会发生变化)。我尝试了许多不同的代码示例,但它们都不起作用。

编辑:粘贴下面的示例是我现在知道不起作用的 - 主要是因为我不需要剥离功能。但是,如何让循环直接从 CSV 文件中提取邮政编码?还粘贴我收到的错误消息。

<小时/>
    responses = list()

    with open("testpostal.csv") as f:
        for postal in map(str.strip,f):     
            rrr = requests.get('https://represent.opennorth.ca/postcodes/{}'.format(postal))
            data = json.loads(rrr.text)
            responses.append(data)

    print(responses)
<小时/> <小时/>
JSONDecodeError                           Traceback (most recent call last)
<ipython-input-182-05e370407e9c> in <module>()
      9     for postal in map(str.strip,f):
     10         rrr = requests.get('https://represent.opennorth.ca/postcodes/{}'.format(postal))
---> 11         data = json.loads(rrr.text)
     12         responses.append(data)
     13 

~/anaconda3/lib/python3.7/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
    346             parse_int is None and parse_float is None and
    347             parse_constant is None and object_pairs_hook is None and not kw):
--> 348         return _default_decoder.decode(s)
    349     if cls is None:
    350         cls = JSONDecoder

~/anaconda3/lib/python3.7/json/decoder.py in decode(self, s, _w)
    335 
    336         """
--> 337         obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    338         end = _w(s, end).end()
    339         if end != len(s):

~/anaconda3/lib/python3.7/json/decoder.py in raw_decode(self, s, idx)
    353             obj, end = self.scan_once(s, idx)
    354         except StopIteration as err:
--> 355             raise JSONDecodeError("Expecting value", s, err.value) from None
    356         return obj, end

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

最佳答案

Python 提供了 CSV module ,您可以使用它执行以下操作:

import csv,requests
URL = 'https://represent.opennorth.ca/postcodes/%s'
responses = []
with open("testpostal.csv") as csv_file:
   csv_reader = csv.reader(csv_file)
   for row in csv_reader:
       responses.append(requests.get(URL % row[0]).json())

这将让您跳过解析 CSV 文件的麻烦。如果我使用不带空格的加拿大邮政编码,则上述代码适用于我。

关于python - 使用 CSV 中的数据迭代 URL 以进行 API 数据拉取 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53565584/

相关文章:

java - 循环遍历 csv 文件时出现奇怪的行

python - 在 python 3 上使用 tkinter 打开图像

python - 如何在 Django 中自动刷新/重定向 View

python - Python 中是否有提供变量积分限制(如 scipy)和高精度(如 mpmath)的多重积分器?

reactjs - 我如何从 laravel api 推送通知来 react native 应用程序?

java - 使用 java 和 usb : Which api? jsr-80,jusb,...?

c# - 如何检索与可配置产品关联的简单产品

java - 如何在一定数量的迭代后重新启动 do while 循环

javascript - 如何使用 setInterval 和clearInterval 获得延迟

python - ValueError : Cannot feed value of shape (256, 0) 对于张量 'Placeholder_2:0' ,其形状为 '(?, 500)'