我想在每次运行程序时使用不同的API密钥进行数据抓取。
例如,我有以下2个键:
apiKey1 = "123abc"
apiKey2 = "345def"
以及以下网址:
myUrl = http://myurl.com/key=...
运行程序时,我希望myUrl
使用apiKey1
。一旦再次运行,我就会喜欢使用apiKey2
等等......即:
首次运行:
url = "http://myurl.com/key=" + apiKey1
第二次运行:
url = "http://myurl.com/key=" + apiKey2
很抱歉,如果这没有意义,但有没有人知道这样做的方法?我不知道。
编辑:
为避免混淆,我查看了 this 的答案。但这不符合我的疑问。我的目标是在我的脚本执行之间循环变换。
答案 0 :(得分:2)
我会使用持久字典(它就像数据库,但更轻量级)。这样,您可以轻松存储选项和下一个访问的选项。
标准库中已经有一个提供这种持久字典的库:shelve
:
import shelve
filename = 'target.shelve'
def get_next_target():
with shelve.open(filename) as db:
if not db:
# Not created yet, initialize it:
db['current'] = 0
db['options'] = ["123abc", "345def"]
# Get the current option
nxt = db['options'][db['current']]
db['current'] = (db['current'] + 1) % len(db['options']) # increment with wraparound
return nxt
每次调用get_next_target()
都会返回下一个选项 - 无论你是在同一次执行中多次调用它还是每次执行一次。
如果您从不拥有超过2个选项,则可以简化逻辑:
db['current'] = 0 if db['current'] == 1 else 1
但我认为有一种方法可以轻松处理多种选择。
答案 1 :(得分:1)
如果不存在此类文件,以下是如何使用自动文件创建的示例:
import os
if not os.path.exists('Checker.txt'):
'''here you check whether the file exists
if not this bit creates it
if file exists nothing happens'''
with open('Checker.txt', 'w') as f:
#so if the file doesn't exist this will create it
f.write('0')
myUrl = 'http://myurl.com/key='
apiKeys = ["123abc", "345def"]
with open('Checker.txt', 'r') as f:
data = int(f.read()) #read the contents of data and turn it into int
myUrl = myUrl + apiKeys[data] #call the apiKey via index
with open('Checker.txt', 'w') as f:
#rewriting the file and swapping values
if data == 1:
f.write('0')
else:
f.write('1')
答案 2 :(得分:0)
我会依赖外部进程来保存上次使用的密钥, 甚至更简单我会计算脚本的执行情况,如果执行计数是奇数,则使用密钥,或者使用偶数的其他密钥。
所以我会介绍像redis这样的东西,这对你可能希望在项目中添加的其他(未来?)功能也有很大帮助。 redis是那些总能带来好处而且几乎没有任何成本的工具之一,能够依赖外部永久存储非常实用 - 它可以用于多种用途。
所以我会这样做:
import redis
db = redis.Redis()
if db.hincrby('execution', 'count', 1) % 2:
key = apiKey1
else:
key = apiKey2
那就是它!