Saya mengakses data json dan ingin mengonversinya dalam kerangka data pandas. Sayangnya, terjadi kesalahan saat json.loads(req.text)

ValueError: No JSON object could be decoded

Di bawah ini adalah kode saya.

HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36",
          "Origin": "https://www.idx.co.id"}
req = requests.get("https://www.idx.co.id/Portals/0/StaticData/HomeHtml/data.js",
                  headers=HEADERS)
stocks = json.loads(req.text)
columns = ['code', 'name']

df = pd.DataFrame([{k: v for k,v in d.items() if k in columns}
              for d in stocks, columns = columns)
0
bkcollection 10 Maret 2020, 11:52

1 menjawab

Jawaban Terbaik

Anda sebenarnya tidak menerima JSON, tetapi file Javascript. Menerapkan ekspresi reguler sederhana yang cocok dengan semua data antara [] Anda dapat mencapai hasil yang diinginkan.

import requests
import json
import re

req = requests.get("https://www.idx.co.id/Portals/0/StaticData/HomeHtml/data.js")
content = re.findall(r"= (\[.*?\]);", req.text)
data = json.loads(content[0])
print(data)

Sunting: situs web yang berguna untuk menguji python regexp adalah https://pythex.org/

1
ionpoint 10 Maret 2020, 09:03