2017-10-08 91 views
0

我對MechanicalSoup和webscraping完全綠色。 我一直在解析一個html時間表,並將其製作成icalendar(ics)文件,以便在移動設備上獲取它。 (我已經成功完成了,耶)。MechanicalSoup棘手的HTML表格

現在,我選擇了我的時間表後,我下載了時間表網站的html。現在我需要使用Python來實際導航到時間表。

這裏是我到目前爲止的代碼(我堅持,因爲HTML是SOOO亂,我不知道如何做到這一點,併爲MechanicalSoup的文件是不是還大):

import argparse 
    import mechanicalsoup 
    from getpass import getpass 
    browser = mechanicalsoup.StatefulBrowser(
     soup_config={'features': 'lxml'}, 
     raise_on_404=True, 
     user_agent='MyBot/0.1: mysite.example.com/bot_info', 
    ) 
    browser.open("http://keaplan.kea.dk/sws/prodE2017/default.aspx") 
    browser.select_form(WHAT TO SELECT :D) 

見這裏的HTML :(http://keaplan.kea.dk/sws/prodE2017/default.aspx 我要做到以下幾點:。從提交的重定向

td class=「FilterPanel」 #go to the table containing this td 
    div id = pFilter #set value to BYG 
    div id = pObject #set value to BAKINT-2l 
    submit (which will redirect to the timetable i need) 

和下載HTML

幫助深情地感謝!

+0

「爲MechanicalSoup文檔沒有那麼大呢。」:它當你發佈你的問題時是非常真實的。現在還不如此:MechanicalSoup的文檔還沒有那麼大): –

回答

0

select_form的參數是一個CSS選擇器。如果你只有一個表單,那麼"form"可以做到這一點(下一版本的MechanicalSoup實際上將它作爲默認參數)。否則,使用瀏覽器的開發工具,例如Firefox右鍵單擊 - >檢查元素 - >右鍵單擊 - >複製 - > CSS選擇器,這可能是一個很好的起點。

在你的情況,甚至認爲有一個有趣的佈局,只有一種形式,所以:

browser.select_form("form") 

不幸的是,你指向的頁面使用JavaScript(在select元素你要搜索的部分產生沒有出現在通過解析頁面獲得的湯對象中)。 。看看MechanicalSoup從頁面看到有

browser.launch_browser() 

:-(你可以通過創建new_control自己丟失的控制解決此問題