2011-06-11 2 views
0

하나의 TXT 파일에 X 개의 HTML 파일의 특정 내용을 구문 분석하려고합니다.Python - 하나의 TXT 파일에 여러 HTML 페이지 구문 분석

#!/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 

을 구문 분석해야하지만 쉽게 변경할 수 있습니다

.

편집 : 고정 intendation는

+0

코드의 들여 쓰기를 수정하십시오. – ThiefMaster

+0

고정 들여 쓰기 – Quantum

+0

이러한 종류의 작업 (텍스트를 찾아서 그 지점부터 시작하는 다른 텍스트 찾기)은 xpath에서 쉽게 정의 할 수 있습니다. '//td/b[text()="Type"]/../following -sibling :: td [1]/text()' –

답변

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