2011-11-02 3 views
0

BeautifulSoup (pdf에서 파일로 변환해야 함)를 사용하여시 정부에 대한 재무 데이터를 가져 오려고합니다. 데이터를 CSV 파일로 가져오고 Excel 또는 SAS로 분석합니다. 내 문제는 "& nbsp;"를 인쇄하고 싶지 않다는 것입니다. 즉 원래의 HTML에 있으며 번호와 행 제목 만 포함됩니다. 내가 정규식을 사용하지 않고 이것을 할 수있는 방법에 대한 제안?BeautifulSoup를 사용하여 특정 텍스트 만 인쇄하는 방법

다음은 내가보고있는 html의 샘플입니다. 다음은 내 코드입니다 (현재 개념 모드의 증명으로, 계속 진행하기 전에 깨끗한 데이터를 얻을 수 있음을 증명해야 함). Python과 프로그래밍에 익숙하지 않으므로 도움이 될 것입니다.

<TD class="td1629">Investments (Note 2)</TD> 

<TD class="td1605">&nbsp;</TD> 

<TD class="td479">&nbsp;</TD> 

<TD class="td1639">-</TD> 

<TD class="td386">&nbsp;</TD> 

<TD class="td116">&nbsp;</TD> 

<TD class="td1634">2,207,592</TD> 

<TD class="td479">&nbsp;</TD> 

<TD class="td1605">&nbsp;</TD> 

<TD class="td1580">2,207,592</TD> 

<TD class="td301">&nbsp;</TD> 

<TD class="td388">&nbsp;</TD> 

<TD class="td1637">2,882,018</TD> 

그것은 문자를 적절한하는 &nbsp; 및 기타 HTML 엔티티로 변환

import htmllib 
import urllib 
import urllib2 
import re 
from BeautifulSoup import BeautifulSoup 

CAFR = open("C:/Users/snown/Documents/CAFR2004 BFS Statement of Net Assets.html", "r") 

soup = BeautifulSoup(CAFR) 

assets_table = soup.find(True, id="page_27").find(True, id="id_1").find('table') 

rows = assets_table.findAll('tr')  
for tr in rows:  
    cols = tr.findAll('td')  
    for td in cols:  
    text = ''.join(td.find(text=True)) 
    print text+"|",  
    print 

답변

2
soup = BeautifulSoup(html, convertEntities=BeautifulSoup.HTML_ENTITIES) 

CODE.

은 csv 파일에 기록하려면 : 나는 t.encode('utf-8') &nbsp;로 인해이 비 ASCII U+00A0 (노 휴식 공간) 문자로 변환되어 사용했습니다

>>> import csv 
>>> import sys 
>>> csv_file = sys.stdout 
>>> writer = csv.writer(csv_file, delimiter="|") 
>>> soup = BeautifulSoup("<tr><td>1<td>&nbsp;<td>3", 
...      convertEntities=BeautifulSoup.HTML_ENTITIES) 
>>> writer.writerows([''.join(t.encode('utf-8') for t in td(text=True)) 
...     for td in tr('td')] for tr in soup('tr')) 
1| |3 

.

+0

매우 시원하고 감사합니다. @ 세바스챤. 한 걸음 더 나아가려면 출력을 쓰는 방법이 있나요? 1 대신 1 | 3 | | 3? – snown

+0

@ snown : 공백 만 포함하는 열을 추가하지 마십시오. 문자열에 공백이 아닌 문자가 있는지 확인하려면 : if column.strip()'. 유니 코드 문자열의'strip()'메소드는 공백없는 중단 공간을 인식하고 문자열에서 제거합니다. – jfs

관련 문제