2012-04-04 45 views
0

我試圖創建的基於時間關閉該日曆的字典:http://disneyworld.disney.go.com/parks/magic-kingdom/calendar/搜索HTML行,用正則表達式線在Python

<td class="first"> <div class="dayContainer"> 
     <a href="/parks/magic-kingdom/calendardayview/?asmbly_day=20120401"> 
     <p class="day"> 1 
     </p> <p class="moreLink">Park Hours<br />8:00 AM - 12:00 AM<br /><br/>Extra Magic Hours<br />7:00 AM - 8:00 AM<br /><br/>Extra Magic Hours<br />12:00 AM - 3:00 AM<br /><br/> 
     </p> 
     </a> 
    </div> 
</td> 

每個日曆項都是在同一行,所以我想通最好只是逐行瀏覽HTML,如果該行包含小時,則將這些小時添加到相應日期的字典中(某些日期有多個小時條目)。

import urllib 
import re 
source = urllib.urlopen('http://disneyworld.disney.go.com/parks/magic-kingdom/c\ 
alendar/') 
page = source.read() 
prkhrs = {} 

def main(): 
    parsehours() 

def parsehours(): 
    #look for #:## AM - #:## PM             
    date = r'201204\d{02}' 
    hours = r'\d:0{2}\s\w{2}\s-\s\d:0{2}\s\w{2}' 
    #go through page line by line            
    for line in page: 
     times = re.findall(hours, line) 
     dates = re.search(date, line) 
     if dates: 
      start = dates.start() 
      end = dates.end() 
      curdate = line[start:end] 
     #if #:## - #:## is found, a date has been found       
     if times: 
      #create dictionary from date, stores hours in variable    
      #extra magic hours(emh) are stored in same format.     
      #if entry has 2/3 hour listings, those listings are emh    
      prkhrs[curdate]['hours'] = times 
    #just print hours for now. will change later         
    print prkhrs 

我遇到的問題是,當我把「打印行」裏的for循環,通過該頁面去,它打印出來一次一個字符,這我假設是什麼搞亂東西。

現在,'打印prkhrs'只是打印任何東西,但使用re.findall爲日期和小時打印出正確的時間,所以我知道正則表達式的作品。關於如何讓它運作的任何建議?

+3

解析HTML - 不要正則表達式 – zellio 2012-04-04 21:48:38

+1

@Mimisbrunnr,儘管有標題和標籤,但似乎並沒有使用正則表達式來解析HTML。 – aaronasterling 2012-04-04 21:52:02

+0

這看起來像'BeautifulSoup'的工作 – 2012-04-04 21:54:36

回答

6

變化page = source.read()page = source.readlines()

source.read()返回整個頁面作爲一個大的字符串。迭代一個字符串(就像當你做for line in page時)一次返回一個字符。僅僅因爲你的變量被稱爲linepage並不意味着Python知道你想要什麼。

source.readlines()返回一個字符串列表,其中每個字符串都是頁面中的一行。

+0

FWIW,我同意這個問題的評論者,而不是以這種方式使用正則表達式,你最好是正確地解析HTML。但是,對於您實際詢問的問題,這是一個有效的答案。 – Whatang 2012-04-04 22:02:59

+0

這樣做!我遇到了一些其他問題,但是解決了這個問題。謝謝! – westbyb 2012-04-04 22:06:07

+0

Mind.Blown !!!謝謝!!!!!! – Jose187 2012-09-30 08:56:02