2016-03-26 28 views
1

Bu company names, code, industry, sector, mkt cap, etc listesindeki selenyumlu tablo için bu website kazımaya çalışıyorum. Bunun için yeni ve aşağıdaki kodu yazdım: AncakSelenium ile web kazıma

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) 

, aşağıda etiketlerini almanın mümkün, ama içinde veri ..

  <div class="table-wrapper results-display"> 
       <table> 
        <thead> 
         <tr></tr> 
        </thead> 
        <tbody></tbody> 
       </table> 
      </div> 
      <div class="pager results-display"></div> 

daha önce yok ayrıca, BS4'ü kazımak için denedi, ancak başarısız oldu. Herhangi bir yardım çok takdir edilmektedir. Ayrıca tablo için bekleme eklersiniz

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

yüklenecek:

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) 

cevap

2

sonuç bir iframe içindedir tamamen yapılabilir. En kolay olanı bir 'find_elements' çağrısı kullanmak (çoğul olduğunu not etmek) ve tüm <tr> öğelerini ele geçirmektir. Listedeki her bir öğede bulma öğesi (tekil) çağrılarını kullanarak ayrıştırabileceğiniz bir liste döndürecektir, ancak bu kez her öğeyi sınıfı sınıfında bulabilirsiniz.

Bir zamanlama sorunuyla karşılaşıyor olabilirsiniz. Aradığın verilerin çok yavaşça yüklendiğini fark ettim. Muhtemelen bu verileri beklemeniz gerekiyor. Bunu yapmanın en iyi yolu, varlığını görünene kadar kontrol etmektir, ardından yüklemeyi deneyin. Öğeleri aramayı tekrar bul (tekrar çoğul kullanıyorum), eleman ararken ve hiçbir şey bulmadığında bir istisna atmayacak, sadece boş bir listeye dönecektir. Bu, verilerin görünmesini kontrol etmek için iyi bir yoldur.

+1

iframe'e geçişte bir hata oluştu - şimdi düzeltildi, lütfen kontrol edin. – alecxe

+1

Bu bana aradığım sonuçları veriyor! Eğer sakıncası yoksa, yazdığınız kodlara biraz daha fazla yorum ekleyebilir misiniz? Bundan daha fazlasını öğrenebilir miyim? Özellikle 'iframe' kısmı hakkında ve ona geçiş? –

+1

@jakewong sizi şu dokümantasyon sayfalarına yönlendirebilirim: http://selenium-python.readthedocs.org/navigating.html?highlight=frame#moving-between-windows-and-frames ve http: // selenium- python.readthedocs.org/waits.html. Bir şeyleri temizlemeliyim. Teşekkürler. – alecxe

0

Bu ona geçiş ve ardından .page_source almak -

İlgili konular