【发布时间】:2019-02-13 23:52:21
【问题描述】:
看这里https://quant.stackexchange.com/questions/40538/automatically-get-ishares-etf-holdings/40610?noredirect=1#comment63646_40610 似乎我可以指向一个有文件的 url,以便将其拉入 DataFrame:
import pandas as pd
url = 'https://www.ishares.com/us/products/239705/ishares-phlx-semiconductor-etf/1467271812596.ajax?fileType=csv'
df = pd.read_csv(url, skiprows=10)
print(df.head())
我尝试对 json 类型的文件做同样的事情:
import pandas as pd
url = 'https://www.ishares.com/us/products/etf-product-list/1522815705927.ajax?fileType=json'
df = pd.read_json(url)
print(df.head()
但是,它正在抛出 ValueError: Expected object or value。我尝试添加lines=True 和其他变体,但没有运气。
我怎样才能把这个 json 作为数据框拉出来?
您可以转到https://www.ishares.com/us/products/etf-product-list 并单击“下载”(这会生成一个.xls)来查看它的实际外观,或者在浏览器中输入https://www.ishares.com/us/products/etf-product-list/1522815705927.ajax?fileType=json。我不选择fileType=csv 或xls 的原因是因为csv 返回带有大量JS 代码的意外输出,而xls 返回HTTP 500 错误。
【问题讨论】:
-
响应是有效的 json 吗?
-
@DanielMesejo 在浏览器中粘贴此文件会将文件下载到您的计算机上
https://www.ishares.com/us/products/etf-product-list/1522815705927.ajax?fileType=json -
您需要一个在浏览器中生成 json 的链接。这只是一个下载文件的链接。我不相信它会将 json 返回给 python,而只是 200 的状态码
-
@Jaba 您是否看到下载此文件(以任何格式)的不同方式,以便我可以将数据加载到数据框?
-
我的简单猜测/解决方法是让它下载然后从
Downloads目录打开文件
标签: python pandas web-scraping