此代码正在执行并提供指向单个网站的数据的多个链接。代码中提到了该网站。网站具有来自多个链接的数据,然后将这些数据制成一个表格
您能建议对这段代码进行哪些更改,以便在不导入任何其他库并将其制成表格的情况下获取数据?
#import libraries
import re
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import urllib.request as ur
from bs4 import BeautifulSoup
s = ur.urlopen("https://financials.morningstar.com/ratios/r.html?t=AAPL")
s1 = s.read()
print(s1)
soup = BeautifulSoup(ur.urlopen('https://financials.morningstar.com/ratios/r.html?t=AAPL'),"html.parser")
title = soup.title
print(title)
text = soup.get_text()
print(text)
links = []
for link in soup.find_all(attrs={'href': re.compile("http")}):
links.append(link.get('href'))
print(links)
预期结果应为表格形式的比率,其中每个比率都可以列为字典,键为年份,值为比率
答案 0 :(得分:0)
1)这是硒和熊猫的一种方法。您可以查看最终结构here。内容已加载JavaScript,因此我认为您可能需要其他库。
2)对此进行了呼叫:
,它返回包含页面信息的json。您可以尝试使用requests
。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import copy
d = webdriver.Chrome()
d.get('https://financials.morningstar.com/ratios/r.html?t=AAPL')
tables = WebDriverWait(d,10).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#tab-profitability table")))
results = []
for table in tables:
t = pd.read_html(table.get_attribute('outerHTML'))[0].dropna()
years = t.columns[1:]
for row in t.itertuples(index=True, name='Pandas'):
record = {row[1] : dict(zip(years, row[2:]))}
results.append(copy.deepcopy(record))
print(results)
d.quit()
最后将列出所有17行。此处显示的前两行和第2行已展开,以显示年份与值的配对。