我正在尝试根据此日历创建一个小时字典: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>
每个日历条目都在一行上,所以我认为最好逐行浏览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
我遇到的问题是,当我将'print line'放在遍历页面的for循环中时,它会一次打印出一个字符,我假设这是弄乱的东西。
现在,'print prkhrs'只是打印什么,但是使用re.findall来表示日期和时间都打印出正确的时间,所以我知道正则表达式有效。关于如何让它发挥作用的任何建议?
答案 0 :(得分:6)
将page = source.read()
更改为page = source.readlines()
source.read()
将整个页面作为一个大字符串返回。迭代字符串(如同for line in page
一样)一次返回一个字符。仅仅因为你的变量被称为line
而page
并不意味着Python知道你想要什么。
source.readlines()
返回一个字符串列表,每个字符串都是该页面的一行。