2011-06-11 61 views
0

我試圖從X個HTML文件解析特定內容到單個TXT文件。Python - 將多個HTML頁解析爲單個TXT文件

我已經dirtily編碼如下:

#!/usr/bin/python 
import sys, mechanize, BeautifulSoup 

def parsedata(): 
    ##do stuff 
    prvitekst = soup.find(text='Random Number') 
    prvikesh = prvitekst.findNextSiblings('td') 
    drugitekst = soup.find(text='Random Month/Yeare') 
    drugikesh = drugitekst.findNextSiblings('td') 
    trechitekst = soup.find(text='Small Random Number') 
    trechikesh = trechitekst.findNextSiblings('td') 

    content = prvikesh + ";" + drugikesh + ";" + trechikesh + ";" 
    writeFile(content); 

def readFile(id): 
    fi = open('result/page-%s.html' % id, 'r'); 

def writeFile(content): 
    f = open('parsed.txt', 'a') 
    f.write(content,"\n") 
    f.close(); 

def main(start): 
    ##initialize vars 
    id = int(start) 
    page = readFile(id) 
    soup = BeautifulSoup(page) 
    print soup.prettify() 
    readFile(id) 
    for id in range(1000000000): 
     parsedata() 
     id = id + 1 
     continue 
    main(sys.argv[1]); 

雖然HTML部分我嘗試刮看起來像這樣

<tr style="height:40px; background-color:#f0f0f0;"><td colspan="4" class="textLargeBold" style="border-bottom: solid 1px #c4c4c4;">Random Details</td></tr> 
<tr class="text"> 
<td align="left" valign="top"><b>Type</b></td> 
<td align="left" valign="top">Color</td> 
<td align="left" valign="top"><b>Random Number</b></td> 
<td align="left" valign="top">213523123123123</td> 
</tr> 
<tr class="text" 
<td align="left" valign="top"><b>Random Month/Year</b></td> 
<td align="left" valign="top">12/13</td> 
<td align="left" valign="top"><b>Small Random Number</b></td> 
<td align="left" valign="top">13233</td> 
</tr> 

我想第一個後過來的細節。因此如果我正在尋找Typem,我想讓它向我展示Color。

以及最終的課程我希望獲得的內容以類似於CSV的格式進行分析。

類型;隨機數;隨機月/年

應該解析

Color;213523123123123;12/13 

ofcourse在我已經做我不是搜索類型的代碼,但可以很容易地改變。

編輯:固定intendation

+0

請修正你的代碼的縮進。 – ThiefMaster 2011-06-11 20:12:28

+0

固定縮進 – Quantum 2011-06-11 20:27:53

+0

這種類型的任務(找到一些文本,然後找到從該點開始的另一個文本)很容易在xpath中定義: '//td/b[text()="Type"]/../follow -sibling :: TD [1] /文本()' – 2011-06-12 00:31:54

回答

0
html=''' 
<tr style="height:40px; background-color:#f0f0f0;"><td colspan="4" class="textLargeBold" style="border-bottom: solid 1px #c4c4c4;">Random Details</td></tr> <tr class="text"> <td align="left" valign="top"><b>Type</b></td> <td align="left" valign="top">Color</td> <td align="left" valign="top"><b>Random Number</b></td> <td align="left" valign="top">213523123123123</td> </tr> <tr class="text" <td align="left" valign="top"><b>Random Month/Year</b></td> <td align="left" valign="top">12/13</td> <td align="left" valign="top"><b>Small Random Number</b></td> <td align="left" valign="top">13233</td> </tr> 
''' 

import htql; 
a=[x for x in htql.HTQL(html, "<b sep>2-0 {name=<b>:tx; value=<td>1:tx } ")]; 
a