2016-03-26 11 views
1

セレンを含む表のcompany names, code, industry, sector, mkt cap, etcのリストについては、このwebsiteを削り取ろうとしています。私はそれに新たなんだと、以下のコードを書いた:しかしSeleniumによるWebスクラブ

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) 

を、私は下のタグを取得することができるんだけど、その中のデータ..

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

私が以前持っていませんBS4もそれを掻き取ろうとしましたが失敗しました。どんな助けでも大歓迎です。

答えて

2

結果はインラインフレームである - それにスイッチしてから.page_sourceを取得:

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

私もロードするテーブル待ちを追加します。

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) 
+1

iframeに切り替える際にエラーが発生しましたが、修正されました。 – alecxe

+1

これは私に私が探している結果を与える!あなたが気にしないなら、書いたコードにもう少しコメントを追加できますか?私はそれからもっと学ぶことができるように?特に 'iframe'部分とそれに切り替えることについて? –

+1

@ jakewong私は以下のドキュメントページを参照してください。http://selenium-python.readthedocs.org/navigating.html?highlight=frame#moving-between-windows-and-framesとhttp:// selenium- python.readthedocs.org/waits.html。物事をクリアする必要があります。ありがとう。 – alecxe

0

この完全にできます。最も簡単な方法は、 'find_elements'呼び出しを使用して(複数であることに注意してください)、<tr>要素をすべて取得することです。リスト内のそれぞれの要素(単数)の呼び出しを使用して解析できるリストが返されますが、今回は各要素をクラスで検索します。

タイミングの問題が発生している可能性があります。あなたが探しているデータが非常にゆっくりと読み込まれていることに気付きました。おそらく、そのデータを待つ必要があります。それを行う最善の方法は、それが現れるまでその存在を確認し、それをロードしようとすることです。要素の呼び出しを検索すると(再び、私は複数形を使用していることに注意してください)、要素を探して何も見つけないときに例外をスローしません。空のリストを返します。これは、表示されるデータを確認するうまい方法です。

関連する問題