轮换代理 IP 在使用 Python 访问 API 以获取 json 请求之前

Rotating Proxy IPs Before accessing API to get json request using Python

问题 1 在发出 API 请求之前如何使用新的 IP 地址?

问题 2除了打印抓取 IP 的结果外,是否有其他好的方法来测试这个 IP 是否真的有效

我创建了一个新文件,每行都有 IP 列表,我使用

获取代理
 proxies_lines = open('proxies').read().splitlines()
 proxy=random.choice(proxies_lines)

我尝试了两种存储代理的方法

 https://000.00.000.00:0000
 https://000.00.000.00:0000
 https://000.00.000.00:0000
 
 Also saw some posts of people storing them this way. Not sure which way is best?

 000.00.000.00:0000
 000.00.000.00:0000
 000.00.000.00:0000
 

我想用这段代码做什么

  1. 遍历我在 stock_list
  2. 中的 7 只股票列表
  3. 获取一个新的 IP 地址
  4. 用股票代码查询 API,API 密钥和新 IP 地址
  5. 打印出股票的结果。

我已完成所有步骤,但有关添加 IP 地址的第 3 步已完成。

这就是我构建 for 循环的方式

for item in stock_list:
    stock_ticker=item
    keys=random.choice(lines)
    proxy=random.choice(proxies_lines)
    time.sleep(1)

    # To access the API
    base_url = 'https://www.alphavantage.co/query?'
    params = {'proxies' : proxy,
             'function': 'OVERVIEW',
             'symbol': stock_ticker,
             'apikey': keys}
    
    response_data_overview = requests.get(base_url, params=params)
    data_overview_MarketCapitalization = response_data_overview.json()['MarketCapitalization']
           
    # Print Results
    print("The Market Cap for {} is = {}".format(stock_ticker,data_overview_MarketCapitalization))
    print("Proxie Used {}".format(proxy))

这是正确的设置方式吗?当我 运行 代码时,它会在停止之前打印出 7 只股票中的 5 只的市值。如果 IP 轮换可行,那么它将打印出 7 / 7 个结果,因为我每分钟只能为一个 IP 地址/密钥执行 5 个请求。

旁白

如果这是一个超级菜鸟的问题,请提前致歉。上个月学习编码并决定使用 Python 作为第一语言。在 treehouse 团队 Python 类 尝试做一个附带项目,即使用预先建立的完善的估值公式构建开源股票筛选器。超级早期阶段哈哈但进步就是进步https://github.com/Jakub-MFP/FIRE_Dashboard

我是未来Python正在训练中哈哈

  • 看起来您正在将代理放入 params,这是发布到服务器的数据;相反,您需要将其传递给 requests.get() 以便它知道如何发出请求。

     params = {'function': 'OVERVIEW',
               'symbol': stock_ticker,
               'apikey': keys}
    
     response_data_overview = requests.get(base_url,
                                           params=params,
                                           proxies={'https': proxy})
    
  • 规避已发布的 API 限制充其量是粗鲁的,最坏的情况是重罪。您应该以较慢的速度发出请求(即每分钟少于 5 个)或获得具有更高限制的高级计划(或其他协商的、可能付费的访问)。

    如果这是一个学习项目,以较慢的速度发出请求可能是最好的方法。