2017-11-09 6 views
0

私は、次のWebサイトからオーストラリア証券取引所の企業によって行われた発表のための「ASXコード」をこすりしようとしています:http://www.asx.com.au/asx/statistics/todayAnns.doPythonを使用してソースコードを返さないウェブサイトをどうやって削り取るのですか?

これまでのところ、私は次のコードでBeautifulSoupを使って試してみました:

import requests 
from bs4 import BeautifulSoup 
response = requests.get('http://www.asx.com.au/asx/statistics/todayAnns.do') 
parser = BeautifulSoup(response.content, 'html.parser') 
print(parser) 

しかし、これを印刷すると、手動でページに移動してページソースを表示したときと同じように印刷されません。私はいくつかのグーグルを行って、stackoverflowを見て、これは、HTMLコードを隠すページで実行されているJavascriptによると信じています。

しかし、私はこれを回避する方法を確信しています。どんな助けでも大歓迎です。

ありがとうございます。

+1

あなたはSeleniumとタグ付けしましたので、試しましたか? –

+0

私はセレンをどこから始めるべきか完全にはわかりません。私はここでボタンをクリックしてソースコードを提供する例を見つけました:https://stackoverflow.com/questions/8960288/get-page-generated-with-javascript-in-pythonしかし、私はボタンをクリックする必要はありません - 私はソースコードが必要です。私はしかし、検索を続けます。 @ cricket_007のリンクありがとう。 –

+0

ウェブサイトは動的に生成されます。必要なデータを要求するためにAPIを使用したり見つけたりする以外、解決策は考えられません。 –

答えて

2

これを試してください。あなたがする必要があるのは、コンテンツが動的に読み込まれていることに気付いたことがあるため、ページが読み込まれるまでスクレイパーがしばらく待つだけで済むようにするだけです。ただし、実行すると、そのWebページからテーブルの左側のヘッダーが取得されます。

import time 
from bs4 import BeautifulSoup 
from selenium import webdriver 

driver = webdriver.Chrome() 
driver.get('http://www.asx.com.au/asx/statistics/todayAnns.do') 
time.sleep(8) 

soup = BeautifulSoup(driver.page_source,"lxml") 
for item in soup.select('.row'): 
    print(item.text) 
driver.quit() 

部分的な結果:

RLC 
RNE 
PFM 
PDF 
HXG 
NCZ 
NCZ 

はところで、私が書かれてのpython 3.5を使用してこのコードを実行してきました。したがって、セレンをバインドする際には最新のPythonのバージョンで問題はありません。

+0

ありがとうございました。これは美しいです。私は実際にbs4の代わりにreを使用したことを除いて、最後にこれに非常に似たコードを書きました。ほんとうにありがとう。私がこれを大規模にやりたければ、セレンのプロセスをどのように寝かせるか考えていますか?再度、感謝します! –

+0

プロセスを高速化します*スリープしません –

+1

機能を待っています。 たとえば、あなたが2.4.0以降で利用可能 selenium.webdriver.support.ui輸入WebDriverWait番号から ことでselenium.webdriver.common.byインポートから webdriverをセレンインポートから 'のXPathまたは他の、 によってその要素を見つけることができますfrom selenium.webdriver.support 2.2.2.0以降利用可能なEC#としての予想される条件。 ff = webdriver。Firefoxの() ff.get( "のhttp:// somedomain/url_that_delays_loading") 試み: 要素.until = WebDriverWait(FF、10)(EC.presence_of_element_located((By.ID、 "myDynamicElement")))最後に : ff.quit() ' –

関連する問題