Python新手
尝试从网页上抓取一些所需的信息。我想得到的第一件事是今天和昨天的日期之间的所有HTML。这是我到目前为止所拥有的
import datetime
import urllib
import re
t = datetime.date.today()
t1 = t.strftime("%B %d, %Y")
y = datetime.date.today() - datetime.timedelta(1)
y1 = y.strftime("%B %d, %Y")
htmlfile = urllib.urlopen("http://www.blu-ray.com/itunes/movies.php?show=newreleases")
htmltext = htmlfile.read()
block1 = re.search(t1 + r'(.*)' + re.escape(y1), htmltext)
print block1
从我所知道的(我可能错了),我的正则表达式应该抓住我想要的东西,这样我才可以从今天的日期开始提取信息。但它返回'无'。
我确信这只是我有限的理解,因为我是新手,但任何帮助都会非常感激。非常感谢!
答案 0 :(得分:2)
Don't use regular expression for parsing HTML,使用 HTML Parser ,例如BeautifulSoup
。
这将是很多代码,但我们的想法是迭代包含指定格式(h3
)日期的所有%B %d, %Y
元素,然后获取所有next table
tags直到我们点击另一个h3
标签或结尾:
from datetime import datetime
import urllib
from bs4 import BeautifulSoup
data = urllib.urlopen("http://www.blu-ray.com/itunes/movies.php?show=newreleases")
soup = BeautifulSoup(data)
def is_date(d):
try:
datetime.strptime(d, '%B %d, %Y')
return True
except (ValueError, TypeError):
return False
for date in soup.find_all('h3', text=is_date):
print date.text
for element in date.find_next_siblings(['h3', 'table']):
if element.name == 'h3':
break
print element.a.get('title')
print "----"
打印:
December 17, 2014
App (2013)
----
December 16, 2014
The Equalizer (2014)
Annabelle (2014)
A Walk Among the Tombstones (2014)
The Guest (2014)
Men, Women & Children (2014)
At the Devil's Door (2014)
The Canal (2014)
The Bitter Tears of Petra von Kant (1972)
Avatar (2009)
Atlas Shrugged Part III: Who Is John Galt? (2014)
Expelled (2014)
Level Five (1997)
The Device (2014)
Two-Bit Waltz (2014)
The Devil's Hand (2014)
----
December 15, 2014
Star Trek: The Next Generation, Season 6 (1992-1993)
Ristorante Paradiso, Season 1 (2009)
A Certain Magical Index II, Season 2, Pt. 2 (2011)
Cowboy Bebop, The Complete Series (1998-1999)
随意提出有关已发布代码的其他问题 - 很乐意解释。
答案 1 :(得分:0)
您的代码在t.strftime("%B %d, %Y")
上抛出错误。
该行的正确格式为t1 = strftime("%B %d, %Y", t)
我也得到:TypeError:参数必须是9项序列,而不是datetime.datetime
从此错误中,您可以搜索许多解决方案。我不知道您使用的是哪个版本的Python,但解决方案使用的是整个时间,而不仅仅是日期。所以你可能需要花时间减去一天。
见这里:Extract time from datetime and determine if time (not date) falls within range?
在这里:How can I generate POSIX values for yesterday and today at midnight in Python?