2009-12-12 62 views
0

我正在尝试从HTML文件中过滤某些数据。例如,HTML文件如下:如何使用Python过滤来自文件的数据?

<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46 </td><td align="right">186K</td></tr> 

我需要提取software_0.1-0部分以及2009年11月17日部分。我怎样才能做到这一点?

非常感谢。

+1

从这个例子中,我们不太清楚过滤标准是什么 - 看起来它可能是'​​'标签'之间的文本,但是这不太合适(有一个'186K'似乎并不想要)。你能再详细一点吗? – 2009-12-12 21:17:09

回答

6

这是很容易与BeautifulSoup

html = '''<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46 </td><td align="right">186K</td></tr>''' 

import BeautifulSoup 
soup = BeautifulSoup.BeautifulSoup(html) 
print soup.td.next.next 
print soup.td.nextSibling.next 

输出:

software_0.1-0.log 
17-Nov-2009 13:46 
2

您可以使用例如流行的beautifulsoup包提取感兴趣的字符串(以及更多文本)。然后,你需要一些字符串操作(或者可能是正则表达式)来分离感兴趣的确切部分,但这取决于你想要应用的规则是什么 - 也就是说,它总是你想要放下的.log后缀从文件名开始,它总是一个将日期与时间分开的空间,等等。如果你准确地规定了规则,就不难实现它们(没有一个精确的规范,但是,这将是一大堆猜测;-)。

0

尝试Beautifull Soup,一个HTML解析器。你会得到一个结构化的文件,并可以选择第一个和第二个TD内容。

在这种情况下它可能是矫枉过正的,但特别是如果您的HTML是从外面,并且可以更改维护人员会感谢您选择可读解决方案。

0

你的要求看似简单,所以这里的非BeautifulSoup方式,只是单纯的字符串操作现在

s="""<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46 </td><td align="right">186K</td></tr>""" 

string=s.split(">") 
for i in string: 
    try: 
     e=i.index("<") 
    except: pass 
    else: 
     print i[:e] 

你可以用我[:e]找到“软件”和日期部分

+0

尽管这在技术上是正确的,但使用美丽汤更好,因为在将来您必须执行更复杂的HTML操作时,这将为您带来红利。 – 2009-12-13 13:35:04

+0

直到事情变得更加复杂的时候,没有必要仅仅为这种情况使用BeautifulSoup – ghostdog74 2009-12-13 23:48:13

相关问题