2017-02-12 53 views
0

我已經使用法國水文局的潮汐數據編寫了一個Python程序。目前,我使用Mozilla Firefox在Windows-10下打開此網站: http://maree.shom.fr/harbor/BREST/wl/0?date=2016-10-31&utc=standard (選擇「Hauteur d'eau heure parure」,並設置港口和日期)。然後,我從彈出菜單中選擇「另存爲」單擊鼠標右鍵,選擇,選中的文本文件選項,並得到一個文件,其中有關的表是存在的,例如:使用python從網頁中獲取「隱藏」數據

Lundi 31 octobre 2016 
00:00 01:00 02:00 03:00 04:00 05:00 
1.79m 2.76m 4.09m 5.43m 6.45m 6.87m 
06:00 07:00 08:00 09:00 10:00 11:00 
6.56m 5.64m 4.42m 3.21m 2.22m 1.61m... 

我的Python應用程序從提取數據這個文件使用正則表達式。 我想自動化這個過程(從Python應用程序打開頁面並獲取相關內容),但我還沒有找到如何做到這一點。網頁的html源代碼(通過在Firefox中右擊閱讀)不包含包含潮汐表。我嘗試使用硒,但我得到的是相同的無用的HTML代碼。有什麼方法,例如用於模擬Firefox執行「另存爲* .text」命令時執行的操作?

回答

0

這並不能模擬firefox的功能,但如果你願意的話,它會爲你提供字典中的數據。
這個想法是在html中找到<tbody>標記,然後拆分這些行。那麼時間是<th>標籤和高度是<td>標籤。
所以有幾個循環和zip做它。
在這個例子中,html在一個文件中。你也可以把它放在一個變量中。

f = open("html.txt","r").read() 

table = f[f.find("<tbody>"):f.find("</tbody>")] 

rows = table.split("<tr>") 

data = [] 

for i in range(1,len(rows),2): 
    data.extend(zip(rows[i].split("<th>")[1:],rows[i+1].split("<td>")[1:])) 

for i in range(0,len(data)): 
    x = data[i][0] 
    y = data[i][1] 
    data[i] = x[:x.find("<")],y[:y.find("<")] 

print dict(data) 

更新:

你不看到在HTML表中的原因,是因爲它的JavaScript生成。所以我們需要像硒這樣的東西,因爲你已經嘗試過了。
我不知道那個網站的所有者是否喜歡你這樣做,所以你可以問問他們,或者看看是否有API。
這就是說,這是如何抓取JavaScript生成的內容。
我爲webdriver安裝了PhantomJS。

from selenium import webdriver 
import time 

driver = webdriver.PhantomJS(executable_path="/usr/bin/phantomjs") 
driver.get(website_link) 
time.sleep(10) # wait as long as it takes for the data to be loaded 
print(driver.find_element_by_tag_name("table").text) 
driver.close() 
+0

謝謝EL3PHANTEN,但我的問題是,有在(容易)訪問HTML沒有標籤,你可以通過訪問該網站看到。我想這可能與動態訪問表(?)有關。這個問題涉及「隱藏的」html,而不是前面的文本。 – Jourdans

+0

@Jourdans好的我剛剛保存了html,並且玩了這個。稍後我回家時,我會嘗試與urllib。如果我弄明白了,我會更新我的答案。 – EL3PHANTEN

+0

@Jourdans更新 – EL3PHANTEN