2017-07-06 65 views
1

對Python很新穎,並且尚未在SO上找到具體的答案,但如果這顯得非常天真或其他地方已經提前道歉。從多個網址的csv列表中打印JSON數據

我試圖從多個公共數據集的url打印'IncorporationDate'JSON數據。我把url保存爲一個csv文件,下面的代碼片段。我只能從一個url打印所有JSON數據,而我不確定如何在所有csv url上運行這些數據,並將csv寫入IncorporationDate值。

任何基本的指導或編輯真的很受歡迎!

try: 
    # For Python 3.0 and later 
    from urllib.request import urlopen 
except ImportError: 
    # Fall back to Python 2's urllib2 
    from urllib2 import urlopen 

import json 


def get_jsonparsed_data(url): 

    response = urlopen(url) 
    data = response.read().decode("utf-8") 
    return json.loads(data) 


url = ("http://data.companieshouse.gov.uk/doc/company/01046514.json") 
print(get_jsonparsed_data(url)) 

import csv 
with open('test.csv') as f: 
    lis=[line.split() for line in f] 
    for i,x in enumerate(lis):    
     print() 

import StringIO 
s = StringIO.StringIO() 
with open('example.csv', 'w') as f: 
    for line in s: 
     f.write(line) 

片段的CSV:

http://business.data.gov.uk/id/company/01046514.json 
http://business.data.gov.uk/id/company/01751318.json 
http://business.data.gov.uk/id/company/03164710.json 
http://business.data.gov.uk/id/company/04403406.json 
http://business.data.gov.uk/id/company/04405987.json 

回答

1

歡迎來到Python世界。

  • 對於處理http請求,我們通常使用requests,因爲它是死的簡單api。

下面的代碼片段做什麼,我相信你想:

  1. 它從每個URL您發佈
  2. 它創建與每個IncorporationDate鍵的新CSV文件中抓取數據。

```

import csv 
import requests 

COMPANY_URLS = [ 
    'http://business.data.gov.uk/id/company/01046514.json', 
    'http://business.data.gov.uk/id/company/01751318.json', 
    'http://business.data.gov.uk/id/company/03164710.json', 
    'http://business.data.gov.uk/id/company/04403406.json', 
    'http://business.data.gov.uk/id/company/04405987.json', 
] 

def get_company_data(): 
    for url in COMPANY_URLS: 
     res = requests.get(url) 
     if res.status_code == 200: 
      yield res.json() 

if __name__ == '__main__': 
    for data in get_company_data(): 
     try: 
      incorporation_date = data['primaryTopic']['IncorporationDate'] 
     except KeyError: 
      continue 
     else: 
      with open('out.csv', 'a') as csvfile: 
       writer = csv.writer(csvfile) 
       writer.writerow([incorporation_date]) 

```

+1

非常感謝你的確做到了這一點。我會通過100或1000個URL來運行它,這可能會造成問題,但我會看看它是如何發生的。 – Oliverater

+0

如果說其中一個網址缺少'IncorporationDate'信息,是否有跳過它的方法?我不斷收到一個KeyError:'IncorporationDate'30秒-1分鐘左右後,我認爲這可能是由於缺少信息..? @seanparsons – Oliverater

+1

@Oliverater我更新了代碼,通過從HTTP請求獲取數據並訪問「IncorporationDate」字典鍵來反映處理潛在錯誤。 –

1

第一步,一定要仔細閱讀所有的網址,在你的CSV

import csv 
csvReader = csv.reader('text.csv') 
# next(csvReader) uncomment if you have a header in the .CSV file 
all_urls = [row for row in csvReader if row] 

第二步,獲取從數據網址

from urllib.request import urlopen 
def get_jsonparsed_data(url): 
    response = urlopen(url) 
    data = response.read().decode("utf-8") 
    return json.loads(data) 

url_data = get_jsonparsed_data("give_your_url_here") 

第三步

  1. 經歷,你從CSV得到的所有URL文件
  2. 獲取JSON數據
  3. 取現場你需要什麼,你的情況 「IncorporationDate」
  4. 寫到輸出CSV文件中,我將其命名爲IncorporationDates.csv

以下代碼:

for each_url in all_urls: 
    url_data = get_jsonparsed_data(each_url) 
    with open('IncorporationDates.csv', 'w') as abc: 
     abc.write(url_data['primaryTopic']['IncorporationDate']) 
+0

非常感謝你爲你的演練,你實際上是在幫助我理解代碼的流程。在url_data = get_jsonparsed_data()後,我遇到了一個錯誤,說get_jsonparsed_data()只需要1個參數(給出0),這可能是由於我的設置?下面發佈的另一個解決方案將爲我現在做的伎倆。 – Oliverater

+1

aaahh !!我錯過了在get_jsonparsed_data()函數中傳遞參數。我現在更新了它。 :) 感謝您的反饋意見。 –