Несколько способов сделать это. 1) Вы можете найти элемент со строкой "Beta"
в html, а затем получить следующий элемент <td>
. 2) Используйте pandas 'read_html()
, чтобы получить таблицу, затем запросите / извлеките то, что вы конкретно хотите из таблицы. или 3) Я предпочитаю эту опцию, так как она дает вам необработанные, необработанные данные: просто получите ответ json от API. Все решения приведены ниже:
Решение 1:
import requests
from bs4 import BeautifulSoup
import re
url = 'https://www.reuters.com/companies/AAPL.OQ/key-metrics'
page = requests.get(url)
if page.status_code == requests.codes.ok:
bs = BeautifulSoup(page.text, 'html.parser')
beta = bs('th',text=re.compile(r'Beta'))[0].find_next('td').text
print (beta)
Решение 2:
import pandas as pd
url = 'https://www.reuters.com/companies/AAPL.OQ/key-metrics'
df = pd.read_html(url)[0]
print (df[df[0] == 'Beta'].iloc[0,1])
Решение 3:
import requests
from pandas.io.json import json_normalize
url = 'https://www.reuters.com/companies/api/getFetchCompanyKeyMetrics/AAPL.OQ'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
jsonData = requests.get(url, headers=headers).json()
print (jsonData['market_data']['beta'])
df = json_normalize(jsonData['market_data'])
df.to_csv('file.csv', index=False)
# Or to excel file
#df.to_excel('file.xls', index=False)
Вывод: в порядке предоставленного решения:
1.14
1.13
1.13326
Чтобы получить ответ JSON:
Если вы go до Inspect
страницы и посмотрите на панель справа. Go до Network
-> XHR
. Просмотрите запросы слева и посмотрите, есть ли там данные, которые вам нужны (возможно, потребуется перезагрузить страницу, тогда вам нужно будет щелкнуть вокруг, чтобы найти ее).
Если вы найдете его, go до Headers
, чтобы получить Request URL
, который вы будете использовать для получения этого ответа.
Как только вы получите ответ, преобразовать в таблицу и вывести в Excel, см. код для решения 3.