0

このカレンダーに基づいて時間の辞書を作成しようとしています: http://disneyworld.disney.go.com/parks/magic-kingdom/calendar/

<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> 

各カレンダー エントリは 1 行にあるので、HTML を 1 行ずつ調べて、その行に時間が含まれている場合は、それらの時間を対応する日付の辞書に追加するのが最善であると考えました (複数の日付を持つ日もあります)。時間エントリ)。

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 ループ内に 'print line' を配置すると、一度に 1 文字ずつ出力されることです。

現在、「print prkhrs」は何も出力しませんが、日付と時間の両方に re.findall を使用すると正しい時刻が出力されるため、正規表現が機能することがわかります。どうすればそれを機能させることができるかについて何か提案はありますか?

4

1 に答える 1

6

page = source.read()に変更page = source.readlines()

source.read()ページ全体を 1 つの大きな文字列として返します。文字列を ( のように) 繰り返し処理すると、for line in page一度に 1 文字ずつ返されます。変数が呼び出されたからといって、Python が必要なものを認識しているわけではlineありpageません。

source.readlines()それぞれがページの行である文字列のリストを返します。

于 2012-04-04T21:49:19.517 に答える