Существует еще одна конечная точка, которую вы можете использовать, которую можно найти на вкладке сети при нажатии на страницу просмотра облигаций. Возвращенный json может быть проанализирован для получения таблицы. Это возвращает немного больше информации, чем показано на URL, который вы дали, но включает в себя то, что вам нужно.
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
import re
def get_bond_info(r):
data = r['data']['instruments']
results = []
for item in data:
results.append(
{'Name': item['djLegalName'],
'CPN (%)': item['couponPercent'],
'LATEST SPREAD OVER TREASURY': item['spread'],
'YLD (%)': item['yieldPercent'],
'YLD CHG': item['yieldChange']
}
)
df = pd.DataFrame(results, columns = ['Name', 'CPN (%)', 'Spread','YLD (%)','YLD CHG' ])
return df
identifier = '''{"application":"WSJ",
"bonds":[
{"symbol":"TMUBMUSD10Y","name":"U.S."},
{"symbol":"TMBMKDE-10Y","name":"Germany"},
{"symbol":"TMBMKGB-10Y","name":"U.K."},
{"symbol":"TMBMKJP-10Y","name":"Japan"},
{"symbol":"TMBMKAU-10Y","name":"Australia"},
{"symbol":"AMBMKRM-10Y","name":"China"},
{"symbol":"TMBMKNZ-10Y","name":"New Zealand"},
{"symbol":"TMBMKFR-10Y","name":"France"},
{"symbol":"TMBMKIT-10Y","name":"Italy"},
{"symbol":"TMBMKES-10Y","name":"Spain"}
]
}'''
url = 'https://www.wsj.com/market-data/bonds?id=' + re.sub('\n\s+','',identifier) + '&type=mdc_governmentbonds'
r = requests.get(url).json()
print(get_bond_info(r))
Если вы ознакомитесь со строительством, вы можете получить другую информацию, например, за разные периоды времени
import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
url = 'https://www.wsj.com/market-data/bonds?id={"application":"WSJ","instruments":[{"symbol":"BOND/BX//TMUBMUSD30Y","name":"30-Year Bond"},{"symbol":"BOND/BX//TMUBMUSD10Y","name":"10-Year Note"},{"symbol":"BOND/BX//TMUBMUSD07Y","name":"7-Year Note"},{"symbol":"BOND/BX//TMUBMUSD05Y","name":"5-Year Note"},{"symbol":"BOND/BX//TMUBMUSD03Y","name":"3-Year Note"},{"symbol":"BOND/BX//TMUBMUSD02Y","name":"2-Year Note"},{"symbol":"BOND/BX//TMUBMUSD01Y","name":"1-Year Bill"},{"symbol":"BOND/BX//TMUBMUSD06M","name":"6-Month Bill"},{"symbol":"BOND/BX//TMUBMUSD03M","name":"3-Month Bill"},{"symbol":"BOND/BX//TMUBMUSD01M","name":"1-Month Bill"}]}&type=mdc_quotes'
r = requests.get(url).json()
data = r['data']['instruments']
results = []
for item in data:
results.append(
{'Name': item['formattedName'],
'CPN (%)': item['bond']['couponRate'],
'PRC CHG': item['bond']['formattedTradePriceChange'],
'YLD (%)': item['bond']['yield'],
'YLD CHG': item['bond']['yieldChange']
}
)
df = pd.DataFrame(results, columns = ['Name', 'CPN (%)', 'PRC CHG','YLD (%)','YLD CHG' ])
print(df)