Python: сохранение данных ответов AJAX в .json и сохранение их в пандах DataFrame - PullRequest
0 голосов
/ 26 февраля 2019

Здравствуйте, и спасибо, что нашли время прочитать эту статью,

Я хочу извлечь информацию о компании с конкретной биржи, а затем сохранить эту информацию в панде DataFrame.У каждой фирмы есть своя веб-страница, которая определяется окончанием "KodeEmiten".Эти коды сохраняются в столбце первого кадра данных:
df = pd.DataFrame.from_dict(data['data'])

Теперь моя цель - использовать эти коды для индивидуального вызова веб-сайта каждой компании и создания файла json для каждого

* 1008.*

Хотя это работает, я не могу сохранить это в новый индекс списка должностей DataFrame вне диапазона и из-за неправильных ошибок ключевых слов.В xhr содержится значительно больше информации, чем мне нужно, и я полагаю, что различные структуры вызывают ошибку, пытаясь сохранить их в новом DataFrame.Я действительно просто заинтересован в получении данных в этих заголовках xhr:
AnakPerusahaan :, Direktur :, Komisaris, PemegangSaham:

Так что мой вопрос вроде как два в одном:
a) Как я могу просто извлечь информацию из этих конкретных заголовков xhr (все они являются таблицами)
b) как я могу сохранить их в новом фрейме данных (или даже в списке, который мне не особо интересен)

import requests
import pandas as pd
import json
import time

# gets broad data of main page of the stock exchange
sxow = requests.get('https://www.idx.co.id/umbraco/Surface/ListedCompany/GetCompanyProfiles?draw=1&columns%5B0%5D%5Bdata%5D=KodeEmiten&columns%5B0%5D%5Bname%5D&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=false&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=KodeEmiten&columns%5B1%5D%5Bname%5D&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=false&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B2%5D%5Bdata%5D=NamaEmiten&columns%5B2%5D%5Bname%5D&columns%5B2%5D%5Bsearchable%5D=true&columns%5B2%5D%5Borderable%5D=false&columns%5B2%5D%5Bsearch%5D%5Bvalue%5D&columns%5B2%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B3%5D%5Bdata%5D=TanggalPencatatan&columns%5B3%5D%5Bname%5D&columns%5B3%5D%5Bsearchable%5D=true&columns%5B3%5D%5Borderable%5D=false&columns%5B3%5D%5Bsearch%5D%5Bvalue%5D&columns%5B3%5D%5Bsearch%5D%5Bregex%5D=false&start=0&length=700&search%5Bvalue%5D&search%5Bregex%5D=false&_=155082600847')

data = sxow.json() # save the request as .json file
df = pd.DataFrame.from_dict(data['data']) #creates DataFrame based on the data (.json) file


# add: compare file contents and overwrite original if same

cdate = time.strftime ("%Y%m%d") # creating string-variable w/ current date year|month|day
df.to_excel(f"{cdate}StockExchange_Overview.xlsx") # converts DataFrame to Excel file, can't overwrite existing file


for i in range (len(df)) :
    requests.get(f'https://www.idx.co.id/umbraco/Surface/ListedCompany/GetCompanyProfilesDetail?emitenType=&kodeEmiten={df.loc[i, "KodeEmiten"]}').json()

#This is where I'm completely stuck

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Это небольшое улучшение в подходе @ bigbounty:
Поскольку цель состоит в том, чтобы сохранить информацию в списке и затем использовать указанный список в скрипте понимание списка на самом деле чуть быстрее.

т.е.

list_of_json = [requests.get('url+nested_json["KodeEmiten"]).json() for nested_json in data["data"]]'
0 голосов
/ 26 февраля 2019

Вам не нужно преобразовывать результат в фрейм данных.Вы можете просто пройтись по объекту json и объединить URL-адрес, чтобы получить сведения о веб-сайте других компаний.

Следуйте приведенному ниже коду:

import requests
import pandas as pd
import json
import time

# gets broad data of main page of the stock exchange
sxow = requests.get('https://www.idx.co.id/umbraco/Surface/ListedCompany/GetCompanyProfiles?draw=1&columns%5B0%5D%5Bdata%5D=KodeEmiten&columns%5B0%5D%5Bname%5D&columns%5B0%5D%5Bsearchable%5D=true&columns%5B0%5D%5Borderable%5D=false&columns%5B0%5D%5Bsearch%5D%5Bvalue%5D&columns%5B0%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B1%5D%5Bdata%5D=KodeEmiten&columns%5B1%5D%5Bname%5D&columns%5B1%5D%5Bsearchable%5D=true&columns%5B1%5D%5Borderable%5D=false&columns%5B1%5D%5Bsearch%5D%5Bvalue%5D&columns%5B1%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B2%5D%5Bdata%5D=NamaEmiten&columns%5B2%5D%5Bname%5D&columns%5B2%5D%5Bsearchable%5D=true&columns%5B2%5D%5Borderable%5D=false&columns%5B2%5D%5Bsearch%5D%5Bvalue%5D&columns%5B2%5D%5Bsearch%5D%5Bregex%5D=false&columns%5B3%5D%5Bdata%5D=TanggalPencatatan&columns%5B3%5D%5Bname%5D&columns%5B3%5D%5Bsearchable%5D=true&columns%5B3%5D%5Borderable%5D=false&columns%5B3%5D%5Bsearch%5D%5Bvalue%5D&columns%5B3%5D%5Bsearch%5D%5Bregex%5D=false&start=0&length=700&search%5Bvalue%5D&search%5Bregex%5D=false&_=155082600847')

data = sxow.json() # save the request as .json file

list_of_json = []
for nested_json in data['data']:
    list_of_json.append(requests.get('https://www.idx.co.id/umbraco/Surface/ListedCompany/GetCompanyProfilesDetail?emitenType=&kodeEmiten='+nested_json['KodeEmiten']).json())
    time.sleep(1)

list_of_json будет содержать все результаты json, которые вызапрашивается для.

Здесь nested_json - это переменная цикла для циклического прохода по массиву json различных KodeEmiten .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...