我正在尝试从网页上重新编写一行代码。该行如下:
<tr><td width=60 bgcolor='#ffffcc'><b>random Value</b></td><td align=center width=80>
这是我尝试过的,但它似乎没有用,任何人都可以帮助我吗? 'htmlbody'包含html页面,不,我没有忘记导入're'。
reg = re.compile("<tr><td width=60 bgcolor='#ffffcc'><b>([^<]*)</b></td><td align=center width=80>")
value = reg.search(htmlbody)
print 'Value is', value
答案 0 :(得分:4)
使用正则表达式无法实现这一目标。有关原因,请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?。您需要的是像HTMLParser这样的HTML解析器:
#!/usr/bin/python
from HTMLParser import HTMLParser
class FindTDs(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.level = 0
def handle_starttag(self, tag, attrs):
if tag == 'td':
self.level = self.level + 1
def handle_endtag(self, tag):
if tag == 'td':
self.level = self.level - 1
def handle_data(self, data):
if self.level > 0:
print data
find = FindTDs()
html = "<table>\n"
for i in range(3):
html += "\t<tr>"
for j in range(5):
html += "<td>%s.%s</td>" % (i, j)
html += "</tr>\n"
html += "</table>"
find.feed(html)
答案 1 :(得分:1)
此
import re
htmlbody = "<tr><td width=60 bgcolor='#ffffcc'><b>random Value</b></td><td align=center width=80>"
reg = re.compile("<tr><td width=60 bgcolor='#ffffcc'><b>([^<]*)</b></td><td align=center width=80>")
value = reg.search(htmlbody).group(1)
print 'Value is', value
打印出来
Value is random Value
这是你想要的吗?
答案 2 :(得分:1)
听起来您可能想要使用findall
而不是search
:
reg = re.compile("<tr><td width=60 bgcolor='#ffffcc'><b>([^<]*)</b></td><td align=center width=80>")
value = reg.findall(htmlbody)
print 'Found %i match(es)' % len(value)
但是,我必须提醒你,正则表达式在处理HTML方面非常糟糕。你最好使用HTMLParser module built in to Python。使用正确的解析器