全局名称<function>未定义错误Python

时间:2015-06-24 22:26:56

标签: python web-crawler

我有一个功能

def details(href):
    response = requests.get(href)
    soup = BeautifulSoup(response.content)
    genre =  soup.find(text="Genre: ").next_sibling.text
    print genre

我试图在另一个函数中调用

def spider(max_pages):
    page = 1
    while page <= max_pages:
        url = 'http://www.boxofficemojo.com/yearly/chart/?page=' + str(page) + '&view=releasedate&view2=domestic&yr=2013&p=.htm'
        source_code = requests.get(url)
        plain_text = source_code.text
        soup = BeautifulSoup(plain_text)
        for link in soup.select('td > b > font > a[href^=/movies/?]'):
            href = 'http://www.boxofficemojo.com' + link.get('href')
            details(href)
            title = link.string
            listOfTitles.append(title)
        page += 1
spider(1)

我收到错误

第27行,在     蜘蛛(1)   第22行,在蜘蛛中     细节(HREF) NameError:未定义全局名称'details'

我已经尝试过self.details(href)方法,但是还有一个错误,说它无法解析“self”。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

由于您在文件spider(1)之前致电def details(),因此该功能details()尚不清楚。

您至少应该从spider(1)开始移动函数定义后面的def details(),只要调用{def spider():就可以将def details()行留在spider()之前1 {}当spider()所需的所有内容都是“已知”时发生,即在目前处理的文件中解析。

答案 1 :(得分:1)

如果你定义这样的详细功能:

  def details(self, href):
      ......

然后,您可以调用self.details。虽然我不太明白你的错误......