从GUI python调用web解析器

从GUI python调用web解析器,python,parsing,user-interface,pyqt,beautifulsoup,Python,Parsing,User Interface,Pyqt,Beautifulsoup,我在自学python的面向对象编程。我使用的是一个基本的GUI和一个简单的web解析器,它们都在不同的类文件中。我的目标是从GUI调用web解析器 我的web解析器类只是下载一个页面并将其存储为列表。当我按下GUI上的按钮时,我想要一个简单的网页打印输出。除了我遇到了问题。当我点击按钮时,它表明我的“解析器”名称没有定义。我开始有点困惑了。如果有人能帮我弄明白,那就太好了。谢谢 我的web解析器: from BeautifulSoup import BeautifulSoup import ur

我在自学python的面向对象编程。我使用的是一个基本的GUI和一个简单的web解析器,它们都在不同的类文件中。我的目标是从GUI调用web解析器

我的web解析器类只是下载一个页面并将其存储为列表。当我按下GUI上的按钮时,我想要一个简单的网页打印输出。除了我遇到了问题。当我点击按钮时,它表明我的“解析器”名称没有定义。我开始有点困惑了。如果有人能帮我弄明白,那就太好了。谢谢

我的web解析器:

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_())
如果name='main': main()

应该是

parse_list = parser.download_page()   
括号告诉Python调用该方法。如果没有括号,
parser.download\u页面
引用方法对象本身。函数是用Python编写的


要修复
namererror
问题,请在
initUI
中将
parser
设置为实例属性:

self.parser = Parser(url)
然后用

parse_list = self.parser.download_page()   

按钮中单击
。(显然,您需要定义
url

看起来像是一个范围问题,
parser
包含在
initUI()
中。当您调用
buttonClicked()
@RedAlert时,它已经消失了。我将parser=parser(object)移动到buttonClicked()中,但出现了错误:TypeError:无法设置内置/扩展类型“object”的属性为什么要传入
object
?重点是什么?做了更改,但仍然得到相同的错误:全局名称“parser”未定义进行上述更改,但现在我得到:全局名称“url”未定义。我在构造器里做的。我想我做得有点不正确。只是跟进一下。你有我的答案吗?@dave在
示例中。\uuu init\uu
你有
self.url=url
,但
url
既不是本地的,也不是全局的。
url
应该是字符串(“http://...)或从某处获得(文本字段、对话框、配置文件、初始化参数等)。@scholli谢谢。但我在别处找到了解决办法。尽管如此,这条线还是有帮助的。
parse_list = self.parser.download_page()