我想调用类中的函数spider,其中包含url,word和maxPages等参数。
当我尝试以下面的方式调用它时,我得到一个错误,因为spider()获得了超过3个参数(它获得了4个参数)。
请有人指导我如何正确调用类中的函数。
我的代码如下所示:
import HTMLParser
from urllib2 import urlopen
from pandas.io.parsers import TextParser
class LinkParser(HTMLParser.HTMLParser):
#other methods
def spider(url,word,maxPages):
pagesTovisit = [url]
numberVisited=0
foundWord = False
maxPages = 0
while numberVisited < maxPages and pagesTovisit != [] and not foundWord:
numberVisited = numberVisited +1
url = pagesTovisit[0]
pagesTovisit = pagesTovisit[1:]
try:
print numberVisited, "Visiting:", url
parser = LinkParser()
data, links = parser.getLinks(url)
if data.find(word)>-1:
foundWord = True
pagesTovisit = pagesTovisit +links
print "Success"
except:
print "failed"
if foundWord:
print "the word",word,"was found at",url
else:
print "word not found"
url = raw_input("enter the url: ")
word = raw_input("enter the word to search for: ")
maxPages = raw_input("the max pages you want to search in for are: ")
lp=LinkParser()
lp.spider(url,word,maxPages)
答案 0 :(得分:3)
你在帖子中的缩进是错的,但我认为蜘蛛是在课堂上。您需要将class LinkParser(HTMLParser.HTMLParser):
def spider(self,url,word,maxPages):
...
关键字作为第一个参数添加到函数中,以使其成为方法:
spider
在LinkParser.getLinks()
方法中,有一个self.getLinks(...)
的来电。您应该通过以下方式调用方法:def methodOfClass(self,additionalArguments):
self.memberName
self.methodName(methodArguments)
,而不是创建该类的另一个实例,因为这不会创建新实例。
还可以通过编写方法在方法内部访问类方法和成员:
// FONT LOADER
{
test : /\.svg/,
exclude: [/images/],
loader : 'file?prefix=font/'
},
// OTHER FILES LOADER
{
test: /\.(mp4|ogg|svg)$/,
loader: 'file-loader'
}
答案 1 :(得分:0)
忽略我认为只有复制粘贴问题的缩进错误
Python中的每个方法都隐式地接收它作为第一个参数调用的实例,因此它的定义应该计算在内。
将def spider(url, word, maxPages)
更改为def spider(self, url, word, maxPages)
。