2011-06-11 34 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