Невозможно очистить текст с помощью Selenium и BeautifulSoup
Я пытаюсь автоматизировать сбор данных для исследовательского проекта от Morningstar с помощью Selenium и BeautifulSoup на Python. Я новичок в Python, поэтому я только что попробовал кучу решений из Stackoverflow и подобных форумов, но мне это не удалось.
То, что я пытаюсь очистить, находится на URL- адресе https://www.morningstar.dk/dk/funds/snapshot/snapshot.aspx?id=F000014CU8&tab=3 В URL-адресе я специально ищу "Faktorprofil", для которого вы можете щелкнуть, чтобы отобразить данные в виде таблицы. Я могу получить заголовки по URL-адресу, но не могу найти какой-либо другой текст. Я пробовал использовать несколько идентификаторов и классов, но безуспешно. Код, который я считаю наиболее успешным, написан ниже. Я надеюсь, что кто-то может помочь!
from bs4 import BeautifulSoup
import os
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
opts = Options()
opts.add_argument(" --headless")
chrome_driver = os.getcwd() +"/chromedriver"
driver = webdriver.Chrome(options=opts, executable_path=chrome_driver)
driver.get("https://www.morningstar.dk/dk/funds/snapshot/snapshot.aspx?id=F00000ZG2E&tab=3")
soup_file=driver.page_source
soup = BeautifulSoup(soup_file, 'html.parser')
print(soup.title.get_text())
#print(soup.find(class_='').get_text())
#print(soup.find(id='').get_text())
Это данные, которые я хочу очистить [1]: https://stackru.com/images/6457aa11cf1f2a71b5fb7719f5ad64fc621d4af9.png
1 ответ
Все эти таблицы находятся в
iframe
. Код ниже извлечет данные и распечатает их в виде списка.
driver.implicitly_wait(10)
driver.get("https://www.morningstar.dk/dk/funds/snapshot/snapshot.aspx?id=F000014CU8&tab=3")
driver.switch_to.frame(1)
driver.find_element_by_xpath("//button[contains(@class,'show-table')]//span").click()
table = driver.find_elements_by_xpath("//div[contains(@class,'sal-mip-factor-profile__value-table')]/table//tr/th")
header = []
for tab in table:
header.append(tab.text)
print(header)
tablebody = driver.find_elements_by_xpath("//div[contains(@class,'sal-mip-factor-profile__value-table')]/table//tbody/tr")
for tab in tablebody:
data = []
content = tab.find_elements_by_tag_name("td")
for con in content:
data.append(con.text)
print(data)
Выход:
['Faktorer', 'Fonds værdi', '5 år Min. Værdi', '5 år Maks værdi', 'Kategori Gennemsnitlig']
['Stil', '62,33', '31,52', '76,36', '48,20']
['Effektiv rente', '48,83', '20,82', '69,12', '34,74']
['Momentum', '58,47', '7,48', '77,21', '71,15']
['Kvalitet', '25,65', '21,61', '59,66', '38,15']
['Volatilitet', '45,25', '34,66', '81,08', '74,93']
['Likviditet', '35,70', '33,40', '74,94', '79,39']
['Størrelse', '39,60', '35,67', '48,78', '87,59']