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