Web raspado con selenium

Estoy intentando raspar este sitio web para ver la lista de company names, code, industry, sector, mkt cap, etc de company names, code, industry, sector, mkt cap, etc en la tabla con selenium. Soy nuevo en eso y he escrito el siguiente código:

 path_to_chromedriver = r'C:\Documents\chromedriver' browser = webdriver.Chrome(executable_path=path_to_chromedriver) url = r'http://sgx.com/wps/portal/sgxweb/home/company_disclosure/stockfacts' browser.get(url) time.sleep(15) output = browser.page_source print(output) 

Sin embargo, puedo obtener las siguientes tags, pero no los datos que contiene.

  

Anteriormente también intenté BS4 para rasparlo, pero no lo logré. Cualquier ayuda es muy apreciada.

Los resultados están en un iframe : cambia a él y luego obtén el .page_source :

 iframe = driver.find_element_by_css_selector("#mainContent iframe") driver.switch_to.frame(iframe) 

También agregaría una espera para cargar la tabla:

 from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver, 10) # locate and switch to the iframe iframe = driver.find_element_by_css_selector("#mainContent iframe") driver.switch_to.frame(iframe) # wait for the table to load wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.companyName'))) print(driver.page_source) 

Esto es totalmente factible. Lo que podría ser lo más fácil es usar una llamada ‘buscar_elementos’ (tenga en cuenta que es plural) y capturar todos los elementos

. Devolverá una lista que puede analizar utilizando las llamadas del elemento de búsqueda (singular) en cada una de las listas, pero esta vez encuentre cada elemento por clase .

Es posible que te encuentres con un problema de tiempo. Noté que los datos que estás buscando se cargan MUY lentamente. Probablemente tengas que esperar por esos datos. La mejor manera de hacerlo será verificar su existencia hasta que aparezca, y luego intentar cargarla. Las llamadas de búsqueda de elementos (nuevamente, tenga en cuenta que estoy usando el plural de nuevo) no lanzarán una excepción al buscar elementos y no encontrar ninguno, solo devolverá una lista vacía. Esta es una forma decente de verificar que aparezcan los datos.