【问题标题】:CSV file and loop list of URL in PythonPython中的CSV文件和URL循环列表
【发布时间】:2020-05-01 00:39:24
【问题描述】:

我一直在尝试使用此代码循环一个 CSV 文件、一个 URL 列表,以在 Excel 中抓取和存储数据。使用一个 URL 我可以做到这一点,但似乎无法找到一种使用 URL 列表(股票市场代码)的方法。这是我的代码:

import requests
import json
import csv
import pandas as pd

Urls = open('AcoesURLJsonCompleta.csv')
for row in Urls:
    obj_id = row.strip().split(',')

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
jsonData = requests.get(row, headers=headers).json()
data = {
    'Ticker': [],
    'Beta': [],
    'DY': [],
    'VOL': [],
    'P/L': [],
    'Cresc5A': [],
    'LPA': [],
    'VPA': [],
    'Ultimo': []
  }

ticker = jsonData['ric']
beta = jsonData['beta']
DY = jsonData['current_dividend_yield_ttm']
VOL = jsonData['share_volume_3m']
PL = jsonData['pe_normalized_annual']
cresc5a = jsonData['eps_growth_5y']
LPA = jsonData['eps_normalized_annual']
VPA = jsonData['book_value_share_quarterly']
Ultimo = jsonData['last']

data['Ticker'].append(ticker)
data['Beta'].append(beta)
data['DY'].append(DY)
data['VOL'].append(VOL)
data['P/L'].append(PL)
data['Cresc5A'].append(cresc5a)
data['LPA'].append(LPA)
data['VPA'].append(VPA)
data['Ultimo'].append(Ultimo)

table = pd.DataFrame(data, columns=['Ticker', 'Beta', 'DY', 'VOL', 'P/L', 'Cresc5A', 'LPA', 'VPA', 'Ultimo'])
table.index = table.index + 1
table.to_csv('CompleteData.csv', sep=',', encoding='utf-8', index=False)
print(table)

输出始终是 KeyError:jsonData,例如 KeyError: 'beta'。如何解决这个问题?

【问题讨论】:

    标签: python loops csv web-scraping


    【解决方案1】:

    假设您的网址有效并且您没有其他验证错误(如KeyError),您需要遍历所有网址并为每个网址构建一个数据框。然后将数据框附加到 csv 文件中,结构如下:

    for row in Urls:
        headers = {
            'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
        jsonData = requests.get(row, headers=headers).json()
        data = {
            'Ticker': [],
            'Beta': [],
            'DY': [],
            'VOL': [],
            'P/L': [],
            'Cresc5A': [],
            'LPA': [],
            'VPA': [],
            'Ultimo': []
        }
        ticker = jsonData['ric']
        beta = jsonData['beta']
        DY = jsonData['current_dividend_yield_ttm']
        VOL = jsonData['share_volume_3m']
        PL = jsonData['pe_normalized_annual']
        cresc5a = jsonData['eps_growth_5y']
        LPA = jsonData['eps_normalized_annual']
        VPA = jsonData['book_value_share_quarterly']
        Ultimo = jsonData['last']
    
        data['Ticker'].append(ticker)
        data['Beta'].append(beta)
        data['DY'].append(DY)
        data['VOL'].append(VOL)
        data['P/L'].append(PL)
        data['Cresc5A'].append(cresc5a)
        data['LPA'].append(LPA)
        data['VPA'].append(VPA)
        data['Ultimo'].append(Ultimo)
        table = pd.DataFrame(data, columns=['Ticker', 'Beta', 'DY', 'VOL', 'P/L', 'Cresc5A', 'LPA', 'VPA', 'Ultimo'])
        with open("append_to_csv.csv", 'a') as f:
            table.to_csv(f, mode='a', header=not f.tell(), index=False)
    

    【讨论】:

      【解决方案2】:

      在我看来,您使用的是beta 而不是Beta。只是修正大写字母。

      【讨论】:

      • 感谢您的回答。我确实改变了它,输出是一样的。还有其他想法吗?
      猜你喜欢
      • 2017-03-25
      • 2018-07-16
      • 1970-01-01
      • 2020-11-06
      • 2013-03-21
      • 1970-01-01
      • 2015-05-17
      • 2018-01-12
      • 2018-02-07
      相关资源
      最近更新 更多