簡體   English   中英

如何從單個網站HTML上的多個鏈接獲取數據並將其制成表格

[英]How to get data and tabulate it from multiple links on a single website HTML

該代碼正在執行並提供來自單個網站的數據的多個鏈接。 代碼中提到了該網站。 網站具有來自多個鏈接的數據,然后將這些數據制成一個表格

您能建議對這段代碼進行哪些更改,以便在不導入任何其他庫並將其制成表格的情況下獲取數據?

    #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)

預期結果應為表格形式的比率,其中列出的每個比率都可以列為字典,鍵為年份,值為比率

1)這是硒和熊貓的一種方法。 您可以在此處查看最終結構。 內容已加載JavaScript,因此我認為您可能需要其他庫。

2)正在對此進行調用:

https://financials.morningstar.com/finan/financials/getKeyStatPart.html?&callback=jsonp1555262165867&t=XNAS:AAPL&region=usa&culture=zh-CN&cur=&order=asc&_=1555262166853

返回包含頁面信息的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行已展開,以顯示年份與值的配對。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM