2013-04-28 3 views
1

나는 APOD 웹 사이트에서 그림을 가져 와서 그 정보를 표시하는 프로그램에서 작업하고 있습니다 (그림은 그림 오른쪽 아래에 있음)). 나는 그림에 대한 정보를 선택합니다 부분 만 구현하는 간단한 클래스를 보여 드리겠습니다 :BeautifulSoup.Tag를 Python을 사용하여 Gtk3의 레이블로 설정하는 방법

import urllib2 
import datetime 

from BeautifulSoup import BeautifulSoup 
from gi.repository import Gtk 

class InfoAPOD(Gtk.Window): 
    """View info about selected APOD image""" 

    def __init__(self): 
     """Initialize the window""" 
     Gtk.Window.__init__(self) 
     self.set_default_size(600, 500) 
     self.set_position(Gtk.WindowPosition.CENTER) 
     self.set_border_width(3) 

     self.grid = Gtk.Grid() 
     self.add(self.grid) 

     self.scrolledwindow = Gtk.ScrolledWindow() 
     self.scrolledwindow.set_vexpand(True) 
     self.scrolledwindow.set_hexpand(True) 
     self.grid.add(self.scrolledwindow) 

     self.label = Gtk.Label() 
     self.scrolledwindow.add_with_viewport(self.label) 

     date = datetime.date.today() 
     page = "ap" + date.strftime('%y%m%d') + ".html" 
     base_url = "http://apod.nasa.gov/apod/" 
     apod_url = base_url + page 

     apod_htm = urllib2.urlopen(apod_url).read() 
     soup = BeautifulSoup(apod_htm) 
     tag_b = soup.findAll('b') 
     tag_p = soup.findAll('p') 

     apod_dat = date.strftime('%Y %h %d') 
     apod_tit = tag_b[0].string.strip() 
     apod_inf = str(tag_p[2]) 

     name = "APOD from " + apod_dat + " - " + apod_tit 
     self.set_title(name) 

     text = apod_inf.replace('<p>', '').replace('</p>', '') 
     self.label.set_markup(text) 
     self.label.set_justify(Gtk.Justification.LEFT) 
     self.label.set_line_wrap(True) 

def main(): 
    """Show the window""" 
    win = InfoAPOD() 
    win.connect('delete-event', Gtk.main_quit) 
    win.show_all() 
    Gtk.main() 
    return 0 

if __name__ == '__main__': 
    main() 

문제는 텍스트 라인이 파괴되고, 당신이 가지고가는 경우 (연속 단락을 형성하지 않는다는 것입니다 APOD 사이트를 보면 내 뜻을 이해할 수 있습니다.) 어쩌면 사진은 수천 단어보다 더 가치가있다 :

요컨대

information for APOD picture

위의 코드와 같이, 나는, 태그를 구문 분석 BeautifulSoup로를 웹 페이지를 가져 오지 urllib2가을 사용하고 하고 있습니다. 그런 다음 원하는 정보 (BeautifulSoup.Tag)를 분리하고 문자열로 변환하여 마크 업을 사용하여 레이블로 설정합니다. 나는 약간의 문서/예제를 여기 저기로 보았습니다 BeautifulSoup하지만 텍스트의 모양을 개선 할 수 없었습니다.

창의 텍스트 모양을 개선하는 방법에 대한 조언을 보내 주시면 감사하겠습니다.

답변

2

줄 바꿈을 제거 하시겠습니까? 는 어때?

text = apod_inf.replace('<p>', '').replace('</p>', '').replace('\n', '') 

그리고 당신은 당신이 같은 시도 할 수 어수선 없도록하려면 : 음

foo.replace('\n\n', 'SOMETOKEN').replace('\n', 'SOMETOKEN', 1).replace('\n', '', 1).replace('SOMETOKEN', '\n') 
+0

을 확실히 텍스트 프리젠 테이션을 향상시킨다. 완벽하지는 않지만 다소 효과가 있습니다 (경우에 따라서 만, 항상 그런 것은 아닙니다). 나는 'apod_inf.replace ('

',' ') .replace ('

',' ') .replace ('\ n \ n ',' ') .replace ('\ n ',') .replace ('설명 :', '\ n')'. 감사! – skytux

+0

** 나는 BeautifulSoup **와 관련이 있다고 생각했습니다. – skytux