2009-12-12 52 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

相關問題