从GUI python调用web解析器

时间:2014-02-26 23:02:11

标签: python parsing user-interface pyqt beautifulsoup

我在python中教自己面向对象的编程。我使用的是基本的GUI和简单的Web解析器 - 两者都在单独的类文件中。我的目标是从GUI调用Web解析器。

我的网络解析器类只下载一个页面并将其存储为列表。当我在GUI上按下按钮时,我想要一个简单的网页打印输出。除了我遇到问题。当我单击按钮时,它表明我的'解析器'名称未定义。我开始有点困惑了。如果有人能让我弄清楚那会很棒。感谢。

我的网络解析器:

from BeautifulSoup import BeautifulSoup
import urllib2

class Parser(object):

    def __init__(self, url):    
        self.url = url
        self.contents  = ''

   def download_page(self):

        #open the page
        page=urllib2.urlopen(self.url)
        soup = BeautifulSoup(page.read())

        page_find=soup.findAll('td')

        #lists for storing page data 
        page_list = []

        #Store HTML table data into list
        for page_data in page_find:
            page_list.append(page_data.string)

        return page_list



 if __name__ == '__main__':
    url = "http://www.any_url"
    Parser = Parser(url)
    print Parser.download_page()

我的GUI类如下:

class Example(QtGui.QMainWindow):

def __init__(self):
    super(Example, self).__init__()

    #Made changes here
    self.url = url
    self.parser = Parser(url)
    self.initUI()

def initUI(self):      

    parse_list = []    

    btn1 = QtGui.QPushButton("Button 1", self)
    btn1.move(30, 50)

    btn1.clicked.connect(self.buttonClicked)            
    self.statusBar()

    self.setGeometry(300, 300, 290, 150)
    self.show()



 #supposed to call web parser when button is pressed   
def buttonClicked(self):

    parse_list = parser.download_page()
    print parse_list
    sender = self.sender()
    self.statusBar().showMessage(sender.text() + ' was pressed')


def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

如果名称 =='主要':     main()的

1 个答案:

答案 0 :(得分:2)

parse_list = parser.download_page     

应该是

parse_list = parser.download_page()   

括号告诉Python调用该方法。如果没有括号,parser.download_page引用方法对象本身。 Python中的函数是first-class objects


要解决NameError问题,请在parser中设置initUI个实例属性:

self.parser = Parser(url)

然后用

引用它
parse_list = self.parser.download_page()   
buttonClicked中的

。 (而且,显然,您需要定义url。)