我正在尝试使用Python提取html页面的 body 从表面上看 - 它几乎是微不足道的(即:
'<body.*?>(.*)</body>', re.IGNORECASE|re.DOTALL)实际上,有几个online regex verifiers证实了上述的有效性。
#!/bin/env python
import re
import urllib2
def display_html(f):
print f.read()
def get_body(text):
p = re.compile('<body.*?>(.*)</body>', re.IGNORECASE|re.DOTALL)
print p, type(p)
m = p.match(text)
print m, type(m)
def get_html_text(url):
f = urllib2.urlopen(url)
return f
def to_text(f):
return f.read()
if __name__ == "__main__":
url = "http://www.ibm.com/us/en/" # A nicely formatted known page
f = get_html_text(url)
html_text = to_text(f)
body = get_body(html_text)
<_sre.SRE_Pattern object at 0xffe245c0> <type '_sre.SRE_Pattern'>
None <type 'NoneType'>
Python 2.7.3,CYGWIN_NT-6.1-WOW64 1.7.22(0.268 / 5/3)2013-07-22 17:06 i686 Cygwin,Windows 7 x86-64。
答案 0 :(得分:1)
正则表达式很好。该网页中没有<body>
标记。它没有身体,而是<frameset>
。
您需要使用re.search
,而不是re.match
。后者尝试匹配字符串开头的正则表达式。