2016-09-18 59 views
1

我有這個website,我想下載頁面的內容。使用python下載動態加載的網頁

我試過selenium,並點擊按鈕,但沒有成功。

#!/usr/bin/env python 
from contextlib import closing 
from selenium.webdriver import Firefox 
import time 

# use firefox to get page with javascript generated content 
with closing(Firefox()) as browser: 
    # setting the url 
    browser.get("http://bonusbagging.co.uk/oddsmatching.php#") 
    # finding and clicking the button 
    button = browser.find_element_by_id('select_button') 
    button.click() 
    page = browser.page_source 
    time.sleep(5) 
    print(page.encode("utf8")) 

此代碼只下載隱藏數據的源代碼。

有人可以告訴我正確的方法嗎?或者告訴我如何可以下載隱藏的數據?

在此先感謝!

+0

你試過用beautifulSoup嗎? –

回答

2

我總是儘量避免硒像瘟疫時刮;它非常緩慢,並且幾乎不是最好的辦法。在挖掘之前,你應該深入挖掘源頭;在這個頁面上清楚的是,html正在進入,然後正在進行單獨的調用來獲取表格的數據。爲什麼不與頁面進行相同的調用?它閃電般快速,不需要html解析;只是返回原始數據,這似乎是你正在尋找的。 python requests導入是完美的。快樂刮刮!

import requests 

table_data = requests.get('http://bonusbagging.co.uk/odds-server/getdata_slow.php').content 

PS:查找這些調用的最佳方法是打開開發控制檯,然後查看網絡選項卡。你可以看到這裏正在撥打什麼電話。另一種方法是去源選項卡,尋找一些JavaScript,並搜索ajax調用(這是我得到了我打電話給上面的URL,路徑是:頂部/ odds-server.com /賠率服務器/ JS/table_slow.js)。後面的選項有時更容易,有時幾乎不可能(如果文件被縮小/縮小)。做任何適合你的工作!

+0

找到這些呼叫的最佳方式實際上是通過網絡選項卡。不是每個人都使用jQuery,並且/或者AJAX調用可以嵌套在某些壓縮的源文件中。 [預覽](http://i.imgur.com/DJqFclr.png) – mpen

+0

感謝您的評論;你絕對是對的。我已經更新了我的答案以反映這一點。我通常喜歡看js,只是爲了瞭解發生了什麼,但你說得對;網絡選項卡是萬一事情被扼殺或壓縮的方式。 – treyhakanson

+0

非常感謝!展望網絡標籤做了訣竅!再次感謝 – Honzys

0

查看Chrome開發工具中的網絡標籤。 Nab the URL離開那裏。

什麼你看是一個DataTable。你可以使用他們的API來獲取你需要的東西。

調整「開始」和/或「長度」參數以逐頁讀取數據。

這是JSON數據,所以它會非常容易解析。

但不錯,不要錘這個可憐的傢伙的服務器。

+0

非常感謝! – Honzys