python2.7 同一个py文件中一个函数怎么调用另一个函数啊

时间:2022-09-29 16:05:30
如下,最后一个函数要调用前面两个函数,但是运行时报'module' object is not callable错。
应该是把getInternalLinks(),getExternalLinks()当类处理了。怎么样才能让他不当类处理呢。又不想另外把上面那两个函数单独写一个py文件再在开始import进来。

#获取页面所有内链的列表
def getInternalLinks(bsObj,includeUrl):
    includeUrl = urlparse(includeUrl).scheme + '://' + urlparse(includeUrl).netloc
    internalLinks = []
    #找出所有以'/'开头的链接
    for link in bsObj.findAll('a',href = re.compile('^(/|.*)'+includeUrl+')')):
        if link.attrs['href'] is not None:
            if link.attrs['href'] not in internalLinks: #不要重复的
                if link.attrs['href'].startwith('/'):
                    internalLinks.append(includeUrl + link.attrs['href']) #相对路径的内链
                else:
                    internalLinks.append(link.attrs['href']) #绝对路径的内链
    return internalLinks

#获取页面所有外链的列表
def getExternalLinks(bsObj,excludeUrl):
    externalLinks = []
    #找出所有以'http'或'www'开头且不包含当前URL的链接
    for link in bsObj.findAll('a',href = re.compile('^(http|www)((?!'+excludeUrl+').)*$')):
        if link.attrs['href'] is not None:
            if link.attrs['href'] not in externalLinks: #不要重复的
                externalLinks.append(link.attrs['href'])
    return externalLinks

#随机获取一个外链
def getRandomExternalLink(startingPage):
    html = urllib2.urlopen(startingPage)
    bsObj = BeautifulSoup(html,features = 'html.parser')
    externalLinks = getExternalLinks(bsObj,urlparse(startingPage).netloc)
    if len(externalLinks) == 0:
        print 'No external links,looking around the site for one'
        domain = urlparse(startingPage).scheme + '://' + urlparse(startingPage).netloc
        internalLinks = getInternalLinks(bsObj,domain)
        return getRandomExternalLink(internalLinks[random.randint(0,len(internalLinks) - 1)])
    else:
        return externalLinks[random.randint(0,len(externalLinks) - 1)]

4 个解决方案

#1


哪一行报错 ,你把完整的报错信息帖上来看看

#2


引用 1 楼 qq_26877377 的回复:
哪一行报错 ,你把完整的报错信息帖上来看看

报错信息如下(其实就是我说的下面的函数调用上面的函数出错):
Traceback (most recent call last):
  File "C:\Python27\Codes\AboutCrawler\TestBS4_06.py", line 67, in <module>
    followExternalOnly(url)                         
  File "C:\Python27\Codes\AboutCrawler\TestBS4_06.py", line 62, in followExternalOnly
    externalLink = getRandomExternalLink(startingSite)
  File "C:\Python27\Codes\AboutCrawler\TestBS4_06.py", line 52, in getRandomExternalLink
    externalLinks = getExternalLinks(bsObj,urlparse(startingPage).netloc)
TypeError: 'module' object is not callable

#3


getExternalLinks直接就可以调用,是不是你的参数startingPage有问题

#4


好吧,原来不是函数调用另一个函数的问题。
是urlparse(startingPage)的问题
我import的时候,写的是from urllib2 import urlparse
我一开始以为import进的是urlparse函数,以为和from urllib2 import urlopen一样,可以直接在程序里用urlopen()调用他。
但是看了原文件才知道。实际上是导入了urlparse模块,万万没想到,urlparse类下面还有个同名的urlparse()函数。
所以正确的方法应该是urlparse.urlparse()而不是urlparse()。
是我自己犯糊涂了,还是谢谢上面的大佬了。
  python2.7 同一个py文件中一个函数怎么调用另一个函数啊

#1


哪一行报错 ,你把完整的报错信息帖上来看看

#2


引用 1 楼 qq_26877377 的回复:
哪一行报错 ,你把完整的报错信息帖上来看看

报错信息如下(其实就是我说的下面的函数调用上面的函数出错):
Traceback (most recent call last):
  File "C:\Python27\Codes\AboutCrawler\TestBS4_06.py", line 67, in <module>
    followExternalOnly(url)                         
  File "C:\Python27\Codes\AboutCrawler\TestBS4_06.py", line 62, in followExternalOnly
    externalLink = getRandomExternalLink(startingSite)
  File "C:\Python27\Codes\AboutCrawler\TestBS4_06.py", line 52, in getRandomExternalLink
    externalLinks = getExternalLinks(bsObj,urlparse(startingPage).netloc)
TypeError: 'module' object is not callable

#3


getExternalLinks直接就可以调用,是不是你的参数startingPage有问题

#4


好吧,原来不是函数调用另一个函数的问题。
是urlparse(startingPage)的问题
我import的时候,写的是from urllib2 import urlparse
我一开始以为import进的是urlparse函数,以为和from urllib2 import urlopen一样,可以直接在程序里用urlopen()调用他。
但是看了原文件才知道。实际上是导入了urlparse模块,万万没想到,urlparse类下面还有个同名的urlparse()函数。
所以正确的方法应该是urlparse.urlparse()而不是urlparse()。
是我自己犯糊涂了,还是谢谢上面的大佬了。
  python2.7 同一个py文件中一个函数怎么调用另一个函数啊